분류 전체보기 45

SpringSecurity에서 anonymous()

Spring에서 테스트를 돌리는 중 Unauthorized(401)가 아닌 Forbidden(403)이 발생하는 문제가 생겼다. @RestController @RequiredArgsConstructor public class PostController { private final PostService postService; @PreAuthorize("isAuthenticated()") @PostMapping("/api/bbs/{name}/posts") public void post(@PathVariable String name, @Valid @RequestBody WritePost request, @AuthenticationPrincipal ExternalUser externalUser) { postSe..

개발/Java,Spring 2019.08.15

Spring Boot 2.x, 3.x Security에서 hasPermission 사용

Spring Boot2.x에서 Spring Security를 이용해 권한을 관리 할 수 있다. 기본적으로 Override된 configure(HttpSecurity http)에서 AntMatcher를 이용해 Role확인을 할 수 있다. 하지만 관리 대상과 요구사항이 많아지면 Role만으로는 문제 해결이 용이하지 않다. 그래서 MethodSecurity를 이용한 권한 관리 방법을 간략히 정리한다. Gradle 설정 compile("org.springframework.boot:spring-boot-starter-security") compile("org.springframework.security:spring-security-oauth2-client") compile("org.springframework.s..

개발/Java,Spring 2019.08.11

SpringBoot Batch에서 JobParameter로 받을 수 있는 Type

개요 SpringBoot Batch에서 JobParameter로 받을 수 있는 타입에 대하여 이야기 합니다. 이슈 SpringBoot Batch 실행 시 JobParameter로 받을 수 있는 타입은 한정되어 있다. String, Boolean, Integer, Date. 하지만 지금은 2019년.. Date는 상당히 골치아프다. 나는 LocalDate를 사용하고 싶었다. 그래서 아래와 같이 JobParameter를 받아줄 수 있는 Class를 만들었다. public class MyJobParameter { @Value("#{jobParameters[requestDate]}") private LocalDate requestDate; public void setRequestDate(String reques..

개발/Java,Spring 2019.05.17

Nginx에서 upstream서버 keealive 설정

Nginx upstream 웹 애플리케이션 서버를 (Spring, flask..) Container 자체적으로 실행하는 경우는 거의 없고 대부분 nginx에서 proxy 하는 경우가 많다. 이렇게 하면 ssl, auth, cache 등의 요구사항을 쉽게 적용, 변경할 수 있다. 이때 nginx는 client 입장이 되는데, keepalive 설정을 할 수 있다. keepalive upstream 접속에 사용될 connection 수. 각 worker process에서 cache 하고 있으며 최대 수에 도달하면 가장 최근에 사용된 connection이 closed 된다. upstream backend { server backend1.example.com; keepalive 32; } server { loc..

개발/Linux,Server 2019.04.30

Nginx socket 개수 확인

보통 웹 애플리케이션을 구동할 때 nginx + upstream 조합을 많이 이용한다. 이때 nginx 서버는 client, upstream은 server가 된다. Nginx 설정, 성능과 관련하여 TCP 연결 상태를 확인할 때가 종종 있다. $ netstat -napo | fgrep nginx 위 명령어를 이용하면 현재 nginx에서 맺은 연결 정보를 얻을 수 있다. ss 명령어로도 대체할 수 있다. 하지만 두 명령어 결과의 개수가 정확히 일치하지는 않는다. $ ss -natp | fgrep nginx TCP 상태별 개수를 확인하려면 아래 명령어를 이용하면 된다. $ netstat -napo | fgrep nginx | awk '{print $6}' | sort | uniq -c 24 CONNECTED..

개발/Linux,Server 2019.04.26

리눅스 설치일자 확인하기

CentOS6.x에서 리눅스 설치 일자를 확인할 일이 생겼다. 몇 가지 좋은 아이디어를 얻을 수 있었는데 아래 두 가지 방법이 가장 무난해 보였다. 오래 된 파일 확인 리눅스에서 설정 파일이 주로 위치하는 /etc 폴더 하위 목록을 시간 순으로 뽑아낸 결과 $ ls -lact --full-time /etc |tail파일 시스템 생성 일자 dumpe2fs 툴을 사용하여 파일 시스템 생성 일자를 확인한다. $ dumpe2fs $(mount | grep 'on \/ ' | awk '{print $1}') | grep 'Filesystem created:'100% 정확하지는 않더라도 가장 가까운 결과를 얻어낼 수 있을 것 같다.

개발/Linux,Server 2019.04.12

CentOS에서 python3, pip3 설치

Repo 주소 등록 현재 CentOS 배포판에 맞는 주소를 복사한다. 배포판을 확인하는 명령어는 아래와 같다. $ cat /etc/*-release CentOS 6: https://centos6.iuscommunity.org/ius-release.rpm CentOS 7: https://centos7.iuscommunity.org/ius-release.rpm 설치 $ sudo yum install -y 위주소 $ sudo yum install -y python36u python36u-libs python36u-devel python36u-pip $ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py PIP 설치 위 명령어로 pip도 설치되기 때문에 별도 설치..

개발/Linux,Server 2019.04.01

XtraBackup의 innobackupex을 이용한 streaming 백업

xtrabackup에서는 stream 방식을 지원한다. 때문에 다른 프로그램의 표준 입력을 통해 direct하는 기능을 활용할 수 있다. 백업 파일을 gz로 압축하기 gzip대신 압축시 multicore를 지원하는 pigz를 사용하면 좋다. $ yum install pigz $ innobackupex \ --no-lock \ --compress \ --compress-threads=$THREAD_COUNT \ --user='$ID' \ --password='$PASSWORD' \ --stream=xbstream ./ | pigz -p $CORE > /PATH/TO/SAVE/NAME.tar.gz 스트림 백업을 Remote로 전송하기 -x: xbstream binary를 extr..

개발/Database 2019.03.10

[2018-01-13] #2 - 노보리베츠 온천, 삿포로

마로호바 호텔에서 맞이하는 아침 동네 여기저기에서 연기가 나온다. 난 늦잠자서 항상 못먹는 조식... 친구가 찍어줬다. 호텔에서 제공하는 셔틀버스를 타고 삿포로로 이동한다. 셔틀버스는 미리 예약해야한다. (안그러면 힘듬 ㅠㅠ) 그렇게 버스를 타고 2시간 가까이 달리면 삿포로 테레비타워 옆에 내려준다. 그리고 걸어걸어 점심을 먹으러.. 라멘 요코초에 왔다.. (절대 오지 말았어야 했는데) 분명 10년전에 왔을때는 맛있었는데... 지금은 비싸고 짜고 느끼하고 맛없는... 아무튼 절대 오지마세요.. 그냥 구경만하고 지나가면 만족... 그리고 도토루 커피에 들려 차 한잔도 하고.. 이후로는 기억이 안난다. 호텔에 들려 낮잠을 잔거 같다.

[2018-01-12] #1 - 출국, 노보리베츠 온천

1월. 한창 코인 열풍이 불때 에이다 코인을 540원에 샀다.1,000원이 넘으면 삿포로에 가자고 친구와 약속했다.그리고 1주일뒤에 1400원이 넘었습니다. 총 2박 3일 노보리베츠, 삿포로 코스로 고고 ~ 지난번 여행에서 사진에 아쉬움이 많아 소니 미러리스 디카를 구입했다. 역시 이번에도 하남시 황산에서 공항버스를 이용하여 인천공항으로 간다. 에이다 코인 덕분에 이번 홋카이도 여행은 아시아나 비즈니스를 이용한다. 이럴때 아니면 언제 타보겠는가.. (홋카이도편 비행기에는 first class가 없다.) 겨울에 저가 항공 이용시 불편한점 중 하나는 잠바를 보관하기 힘들다는 것이다. 비즈니스석은 외투를 따로 보관 해준다. (처음 알았음) 기장님 코스 지렸고요.. 항공사, 시간에 따라 비행 경로가 다른것인가?..