본문 바로가기

Spring12

[팀 프로젝트] 유니크 제약 조건과 동시성 문제 들어가며이전에 작성한 글(https://kongdevlog.tistory.com/16)에서 유니크 키 제약 조건에 대한 이해가 부족하여 오버 엔지니어링(+ 잘못된 작업)을 하게되었습니다.해당 과정에 대한 원인을 분석하고 개념을 정리하기 위해 글을 작성합니다.이전 구현@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... .. 2025. 2. 1.
[팀 프로젝트] 트랜잭션의 커밋 시점과 동시성 관리 상황@Transactional public MemberLoginServiceDto login(String phoneNumber) { Member member = createOrFindMemberByPhoneNumber(phoneNumber); if (member.isBanned()) { throw new BannedMemberException(); } ... return new MemberLoginServiceDto(accessToken, refreshToken, member.isProfileSettingNeeded()); } private Member createOrFindMemberByPhoneNumbe.. 2025. 1. 28.
[팀 프로젝트] queryDsl 도입과 테스트 코드 들어가며팀 프로젝트에서 CQRS 패턴을 적용하게 되면서, 조인과 같은 JPQL을 손쉽게 사용함과 직접적인 도메인 노출을 피하기 위해 queryDsl 을 도입하고 query 계층을 사용하기로 하였습니다. 따라서 이에 맞게 queryDsl 코드를 작성함과 동시에 그에 따른 테스트 코드를 작성하는 과정을 기록하기 위해 글을 작성하게 되었습니다.@ElementCollection 을 사용함에 따른 불편함!@ElementCollection @CollectionTable(name = "member_hobbies", joinColumns = @JoinColumn(name = "member_id")) @Column(name = "hobby_id") private Set hobbyIds = new Hash.. 2025. 1. 21.
[Kong's Blog] 프로젝트 회고와 리팩토링 (4) - 스케쥴링 적용 목적이전까지 구현한 배치 작업(내 티스토리 게시글을 읽어온 후, DB에 저장.)을 매일 한번씩 실행하기 위해 도입하기로 하였습니다.이를 위한 방법으로 Spring 에서 지원하는 Spring Scheduler를 선택하였습니다.Quertz 라는 또 다른 Scheudling 라이브러리가 있다고 하지만, 현재 제 스펙에서는 단순히 작업 실행만 있어도 될 것 같아 배제하였습니다!초기 세팅@SpringBootApplication@EnableSchedulingpublic class BlogApplication { public static void main(String[] args) { SpringApplication.run(BlogApplication.class, args); }} @Enabl.. 2025. 1. 17.
[Kong's Blog] 프로젝트 회고와 리팩토링 (1) - 로그인/로그아웃 들어가며개인 블로그 프로젝트를 구현하기 위한 코드들을 뒤돌아보며 겸사겸사 리팩토링 과정을 담기위해 글을 작성하게 되었습니다.이번 글은 로그인/로그아웃이라고 하였지만, 사실상 Token Filter 를 리팩토링 하는 글입니다!관련 포스트 : https://kongdevlog.tistory.com/9 JWT 로그인 방식 구현과 생각 정리들어가며인턴을 하던 시절에 세션을 적용해보았던 것을 빼면, 한번도 세션 방식의 로그인을 구현해보지 않았습니다. 그저 관성적으로 (대부분의 로그인 방식으로 JWT를 사용하니..) 토큰 방식의kongdevlog.tistory.com 구현 코드 (JwtFilter.class)protected void doFilterInternal(HttpServletRequest request, .. 2025. 1. 12.
JWT 로그인 방식 구현과 생각 정리 들어가며인턴을 하던 시절에 세션을 적용해보았던 것을 빼면, 한번도 세션 방식의 로그인을 구현해보지 않았습니다. 그저 관성적으로 (대부분의 로그인 방식으로 JWT를 사용하니..) 토큰 방식의 로그인을 구현해왔던 것 같습니다. 따라서 JWT 방식의 로그인 구현 과정(Kong's Blog)을 정리하면서 그 과정 속에서 세션과의 차이점을 정리하고자 글을 작성하게 되었습니다! 해당 내용은 저의 생각을 정리하면서 작성한 것이기 때문에 잘못된 내용이 있을 수 있습니다! (댓글 남겨주시면 감사하겠습니다..)토큰 만들기 (JwtProvider)public class UserJwtProvider { private String secret = "this-is-secret-key-value-at-least-128-byt.. 2025. 1. 11.