분류 전체보기 52

Builder 패턴과 Lombok @Builder 사용 시 주의사항

자바 개발을 하다보면 대부분 Lombok을 사용하여 개발 편의성을 올리곤 한다. Lombok이 편한 건 맞지만 @Data 어노테이션을 잘못 사용했다간 객체 생성부터 어긋나기 시작해 버린다. Getter, Setter, RequiredArgsConstructor, ToString, EqualsAndHashCode, Value를 모두 한번에 적용하는데, 위험하지 않은 게 이상한 일이다. 무분별한 Setter 사용과 ToString으로 인한 순환 참조 문제 등 @Data나 @Setter 어노테이션의 위험성은 익히 알려져 있는 것 같은데, 함께 많이 쓰는 @Builder 어노테이션에 대해서는 상대적으로 위험성이 덜 알려진 거 같다.(내 기분이..) 나처럼 하수들이 막 쓰면 안될 정도로 '이거 좀 위험한데' 싶은..

개발/Java|Spring 2023.02.20

대량 이미지 동일한 사이즈로 분할하기(JAVA)

웹툰처럼 세로로 엄청나게 긴 대량의 이미지를 동일한 사이즈로 분할해야 하는 상황이 발생했다. 이미지 편집 도구를 사용해도 되지만, 세로 길이가 10만 픽셀이 넘어가는 이미지를 일단 불러오는 것조차 버벅거리며 문제가 된다. 이런 반복적이고 간단한 로직에는 역시 기계만큼 든든한 게 없다. 그래서 이미지를 자르는 프로그램을 Java로 간단하게 만들어서 해결했다. 일단 결과 샘플을 먼저 보고 전체 코드를 살펴보자. 작업 샘플 이미지 샘플용으로 인터넷에 돌아다니는 유튭 캡쳐짤을 하나 줏어왔다. 윗부분만 짤라놔서 짧아보이지만, 실제로는 세로 길이가 2만 픽셀이 넘는 이미지이다. 이걸 프로그램에 넣고 돌리면, 이렇게 나온다. 젤 위에 한 컷을 썸네일/표지 용으로 한 컷 자르고, 나머지를 장당 4컷이 들어가도록 이미지..

개발/Java|Spring 2023.02.13

JWT 토큰 라이브러리 java-jwt와 jjwt 간단 비교

경험이 많지 않아 단언할 순 없지만, REST 아키텍처로 웹 서비스를 만들다 보면 대부분 토큰 인증 방식을 스프링 시큐리티에 접목하게 된다. 클라우드 서비스를 이용하는 추세를 보면, 세션 인증 방식보다 서버 분산 등 확장성에 더 좋은 토큰 인증 방식을 선호하게 된다. 서버를 여러대 두거나, 같은 사용자가 서로 다른 도메인 데이터를 요청할 경우 세션 유지를 위한 처리(비용)이 증가하기 때문이다. 그래서 토큰을 통해 사용자의 모든 요청을 확인하는 방식을 적용하는데, 이 때 JWT 토큰을 많이 사용한다. JWT를 학습하다보면, JWT 라이브러리에도 다양한 선택지가 있다는 것을 알 수 있고, 그럼 이제 뭘 선택해야 할지 고민에 빠지게 된다. 이 글은 그 고민의 결과물이다. java-jwt와 jjwt Json W..

개발/Java|Spring 2023.02.09

Spring Security JWT 토큰으로 인증하기

[환경] Java8 SpringBoot 2.7.7 with Gradle Spring Security 5.7.6 세션(Session) 인증 방식 장단점 JSESSIONID는 서버에서 세션(사용자) 정보를 찾는 Key로만 활용한다. 그 자체로는 개인정보가 들어 있지 않지만, 세션하이재킹 공격을 당할 수 있기때문에 절대적으로 안전하지는 않다. 서버에 세션 정보를 저장할 공간이 필요하다. 분산 서버에서는 세션을 공유하기 어렵다. 토큰(Token) 인증 방식 장점) 세션을 관리할 필요가 없어 별도의 서버 저장소가 필요없다. 서버 분산이나 클러스터 환경처럼 확장성에 좋다. 단점) 한 번 제공된 토큰은 회수가 어렵다. 세션은 서버의 세션 정보를 삭제하게 되면 클라이언트 브라우저의 JSESSIONID는 사용할 수 없게..

개발/Java|Spring 2023.02.07

Spring Security Custom Fiilter 적용(UsernamePasswordAuthenticationFilter를 활용해 모든 권한을 가진 tester 계정 만들기)

[환경] - Spring Security 5.7.6 기준, Java 8 이상 'test'라는 계정을 이용해 모든 권한 테스트를 편하게 하고 싶을 때, UsernamePasswordAuthenticationFilter를 활용하면 간단하게 할 수 있다. 그럼 해당 필터를 커스텀하여 테스트를 좀 더 손쉽게 만들어 보자. UsernamePasswordAuthenticationFilter Spring Security가 제공하는 formLogin을 이용하면 UsernamePasswordAuthenticationToken을 내려주는데 바로 이 토큰을 제공하는데 필터다. username과 password로 로그인을 하려고 하는지 체크하고, 만약 로그인이면 여기서 토큰을 처리하고 가야 할 페이지로 보내준다. 이제 이 필..

개발/Java|Spring 2023.02.07

git 간단 명령어 모음

[목차] 1. 설정 및 기초 2. git branch 3. git push, pull, clone 1. 설정 및 기초 이름, 메일 설정 git config --global user.name "~~~" git config --global user.email "~~~" 설정 확인 git config --list git초기화 git init 트래킹(전체파일) git add . 커밋 with message git commit -m "~~~" 위 작업을 한 번에 git commit -am "~~~" 로그 확인 git log reset --hard : 모두 원복 reset --mixed : add 하기 전으로 (작업영역의 내용 변경이 더 필요할 때) reset --soft : commit 하기 전으로 (주로 이전 ..

개발/Etc 2023.01.25

2023 올해의 컬러 비바 마젠타 (팬톤 컬러)

팬톤에서 올해의 컬러를 선정하는 방법 많은 사람들이 알다시피 미국 색채 전문 기업 팬톤에서 매년 12월 다음 해를 대표할 올해의 컬러를 선정한다. 올해의 컬러 선정은 1999년에 2000년의 컬러인 'Cerulean Blue'를 선정하면서 시작되어 올해 햇수로만 23년 차가 되었다. 한 해 동안 일어나는 모든 일들이 색상에 영향을 미칠 수 있고, 이런 사건들이 색의 언어를 통해 어떻게 표현되고 반영되는지 보여주고자 한 것이다. 팬톤에서는 매년 올해의 컬러를 선정하기 위해 글로벌 컬러 전문가 팀이 전세계를 샅샅이 뒤지고 있다고 한다. 다양한 분야의 문화적 현상을 조사하고, '미래 시장조사', '빅데이터 분석', '타당성 분석' 3단계에 걸쳐 해당 연도에 알맞은 색을 선정한다. 한 해를 하나의 색으로 함축하..

디자인 2023.01.25

인텔리제이(IntelliJ) 코드 실시간 반영(서버 자동 재시작)

환경 IntelliJ Spring Boot Gradle 의존성 추가 dependencies { developmentOnly("org.springframework.boot:spring-boot-devtools") } 인텔리제이 설정 추가 - 2021.2 버전 이전 윈도기준 컨트롤+시프트+A 누른 후 Actions 탭에서 Registry 검색 -> compiler.automake.allow.when.app.running 체크 - 2021.2 버전 이후 File -> Settings -> Advanced Settings 항목 중 Allow auto-make to start even if developed application is currently running 체크 application.yml (프로퍼티) ..

개발/Java|Spring 2023.01.19

스프링 의존성주입 생성자주입(@RequiredArgsconstructor 쓰는 이유)

1. @Autowired는 변경이 어렵다 @Service @Transactional(readOnly = true) public class MemberService { @Autowired private MemberRepository memberRepository; } 2. 그래서 변경을 위해 Setter Injection 사용 하지만 조립한 이후에 바꿀 이유가 없음. @Service @Transactional(readOnly = true) public class MemberService { private MemberRepository memberRepository; @Autowired public void setMemberRepository(MemberRepository memberRepository) {..

개발/Java|Spring 2023.01.18

Spring Security Authentication(인증)

Authentication은 인증된 결과만 저장하는 게 아니라 인증을 하기 위한 정보와 인증을 받기 위한 정보가 하나의 객체에 동시에 들어있다. AuthenticationProvider가 어떤 인증에 대해서 허가를 할 것인지 판단하기 위해 직접 입력된 인증을 보고 허가된 인증을 내주는 방식이기 때문이다. Authentication Mechanism Username and Password 사용자 이름/비밀번호로 인증하는 방법 OAuth 2.0 Login 소셜 로그인. OpenID Connect 및 비표준 OAuth 2.0 로그인 SAML 2.0 Login SAML 2.0 로그인 Central Authentication Server(CAS) 중앙인증서버(CAS) 지원 Remember Me 세션이 만료된 사용..

개발/Java|Spring 2023.01.18
728x90
반응형