Enum Converter의 도입 필요성 회사의 데이터베이스에서 id와 name만 가지고 있는 DrinkType, CategoryType, PaymentType과 같은 테이블이 약 20개 이상이 존재한다. PHP -> Spring 으로 변환하는 프로젝트에서 우리는 이러한 테이블을 Enum을 사용해서 값을 관리하기로 결정했다. 또한 많은 테이블이 Status라는 컬럼을 가지고 있는데, 이는 0과 1 뿐만 아니라 -1, 2, 3 처럼 여러가지 상태 값을 가지고 있다. 컬럼을 설명하는 엑셀 파일이 존재하지만, 이는 값이 궁금하면 엑셀파일에서 검색해야하는 번거로움을 가지고 있다. 하지만 기존에 존재하는 Status와 같은 값을 모두 String 값으로 변환해 저장하는 것은 추가 작업이라고 생각하여, DB에는 계..

멀티모듈 프로젝트 QueryDsl 세팅 아직 Gradle에 대한 이해가 부족해서 이것저것 수정해보고 해결한 방법을 공유해보겠다. 1. Entity를 포함한 모든 모듈에서 QClass가 생성되야 함에도 불구하고, QueryDsl dependencies를 추가한 모듈에서만 생기던 문제. 해결 방법 기본적으로 moule-core라는 공통 모듈을 모든 모듈에 추가해주고 있었다. 따라서 module-core에 dependencies를 추가해주면 모든 모듈프로젝트에 QClass가 생성될 것이라 예상했다. 그런데 QueryDsl 의존성 설정을 한 공통 모듈에만 generated 폴더가 생성되고, 다른 모듈에는 생성되지 않았다. 그래서 공통모듈에 설정해준 queryDsl 설정을 root 프로젝트의 build.gradl..
항해가 끝나고 몇 번의 면접을 끝내고 개강을 하니 지쳐서 일주일 정도 쉬려고 했는데.. 일주일이 이주일이 되고... 이제 거의 3주가 다 되어 가는데, 이제부터 꾸준히 TIL 작성, 커밋, 면접 예상 질문들을 정리해보려고 한다. 개강과 함께 정신 좀 차렸으면 좋겠다.. 내 자신 1. JPA는 무엇인가?✅ RDBMS(관계형 데이터 베이스)와 OOP(객체 지향 프로그래밍) 객체 사이의 불일치를 해결하기 위한 ORM(Object-Relational Mapping) 기술. ORM 기술을 구현하기 위해 사용된 것이 Hibernate이고, 이러한 ORM 기술 프레임 워크의 표준화의 결과로 만들어진 것이 JPA이다. JPA를 이용하면 개발자가 직접 DB를 작성하지 않고 JPA API를 통해 데이터 베이스를 저장, 관..
AttributeConverter 당신은 커피가 땡긴다 리펙터링 중, 잔의 사이즈 / 용량 단위 / 재료 와 같이 Enum 객체가 필요한 부분이 늘었다. Enum을 어떻게 효율적으로 저장하고 불러올 수 있는지 고민하던 중 AttributeConverter의 존재를 알게 되었다. 1. Enum 객체 생성 @Getter public enum Category { BASE("원액", 1L), MILK("우유", 2L), WATER("물/얼음", 3L), CREAM("크림", 4L), SYRUP("시럽", 5L); private final String category; private final Long code; Category(String category, Long code) { this.category = c..

발제에서는 미니 프로젝트라 긴장하지 말고 쉬엄쉬엄 하라다던데 다들 잘하시고 욕심이 있으신 분들이다보니 결국 프로젝트 하는 기간에는 2시 넘어서 잤던 것 같다. 프론트와 협업을 하면서 문제가 있었던게 로컬환경과 배포 환경이 다르다보니 문제가 발생한 구간을 찾는 게 정말 힘들었다. 프론트와의 커뮤니케이션도 중요했지만 백앤드 사이에서의 커뮤니케이션도 중요하다고 생각했다. 프로젝트를 하면서 첫 번째 닥친 문제가 로컬 환경에서는 로그인이 되는데 프론트와 연결을 하려다보니 로그인이 전혀 안되는 문제였다. 이는 Spring 쪽에서 Spring Security가 기본적으로 제공하는 세션을 사용했던 것과 .formLogin()을 사용해 로그인을 시도했다는 점이었다. Spring Security CORS 설정 @Bean ..
IETF(Internet Engineering Task Force, 국제 인터넷 표준화 기구) 인터넷 기술의 작동 방식을 설계하고 기술 표준 문서를 만드는 단체 ICANN(Internet Corporation for Assigned Names and Number, 인터넷 주소 관리 기구) 도메인 네임, IP주소, 일부 프로토콜 정보와 같이 인터넷이 작동하려면 고유하게 유지돼야하는 이름과 번호를 할당한다. 도메인 네임 등록 대행 업체에 권한을 승인하고 대행업체는 개인이나 단체에 도메인 이름을 할당한다. 도메인 네임 시스템(DNS) 최상위 도메인: .com, .edu, .us (국가 코드) princeton.edu -> 서브 도메인(하위 도메인) 고전학과 classics.princeton.edu 컴퓨터 학과..

Spring Security의 Security Session 기반의 인증 방식을 사용하여 로그인을 구현하려고 했지만, 프론트와 합치는 과정에서 Session이 전달되지 않는 오류가 발생했다. WithCridential 설정도 바꿔주고 서브도메인을 서버 IP와 연결시켜 cors 에러도 하나하나 해결하였지만 JWT로 구현하자는 의견이 많아 결국 JWT를 구현하게 되었다. 일단 Spring과 React를 합친 프로젝트를 분석했당 SecurityContextHolder HTTP 통신 왜 갑자기 HTTP에 대해서 나오는지 궁금할 수 있다. "로그인" 이라는 과정은 서버와 클라이언트가 데이터를 주고 받는 통신 방법이 필요하다. -> HTTP는 connectless/stateless 속성이 필요하다. 토큰 방식 (클..