온라인 강의를 듣고 배운 점들을 기록한다. ServiceResult - 서비스 단의 결과물도 하나의 모델에 반환하는 식으로 코드를 작성한다. - 서비스단 코드가 간결해지는 효과도 있고, 가독성도 좋아진다. - ResponseResult라는 모델을 만들어서 결과를 반환하게 하는 것과 비슷한 맥락 같다. - 이렇게 Model을 만들어서 따로 관리해주면 각 코드가 실제로 해야 하는 일에 집중할 수 있는 코드가 된다고 한다. JpaResultMapper // https://mvnrepository.com/artifact/ch.simas.qlrm/qlrm implementation group: 'ch.simas.qlrm', name: 'qlrm', version: '1.7.1' - Native Query 결과인 ..
온라인 강의를 듣고 배운 점들을 기록한다. Custom ResponseResult - HTTP 헤더를 이용해서 정보를 표현하는 것은 굉장히 제한적이다. - 그래서 억지로 HTTP 헤더를 이용해 결과를 표현하는 것보단, Body에 따로 헤더 역할을 하는 객체를 사용해서 정보를 표현하는 방법이 좋다. - 그러니깐 Body에 내가 만든 헤더를 넣고 그 안에 정보(성공, 실패, 기타 로그 등)를 넣고, 반환해야 할 정보는 따로 바디 객체 안에 넣어서 반환한다. - 실제로 공공 데이터 API를 보면 반환 정보 스펙이 비슷하다. 00 NORMAL SERVICE. ... - 이런 식으로 Body에 모두 표현한다. - 클라이언트 입장에서도 이런 방법이 괜찮다고 보는 게, 무조건 서버에서 HTTP 상태 에러를 보내지 않..
어떻게 컨테이너의 변경 사항 및 데이터를 저장할 수 있을까? - 컨테이너는 하나의 프로세스라고 생각할 수 있다. - 프로세스가 완벽히 종료되어 사라지면 프로세스의 데이터도 같이 사라진다. - 이렇게 컨테이너 내부에서 생성되거나 변경된 파일에 대한 데이터를 관리해야 하는 니즈가 있다. - Docker는 Container Layer의 문제점을 개선한 Docker Volumne이라는 기술로 이것을 해결했다. R/W Container Layer - 컨테이너 내에서 생성/변경된 모든 파일을 Read-Write 가능한 Container Layer에 저장한다. - Docker는 Copy-on-Write 방식으로 변경 사항을 관리한다. - 컨테이너는 이미지의 연속된 층인데 컨테이너 자체에서 관리하는 층(R/W laye..
애플이 최근에 출시한 M1 프로세서를 사용한 MAC은 VMware, VirtualBox 등 무료 가상 머신을 사용할 수 없다. 현재까진 Parallels에서만 사용이 가능한 것으로 알고 있다. MAC OS는 기본적으로 터미널이 있고, 리눅스 기반 명령어를 사용할 수 있도록 환경이 어느 정도 갖추어져 있지만, 그 조상이 Linux가 아니라 라 Unix(Linux의 조상)이어서 그런진 몰라도 리눅스 환경에서 사용했던 명령어 일부가 지원하지 않거나 다른 명령어가 그 역할을 한다. 포인트는 공부 및 프로젝트 배포 실습을 위해선 Linux환경이 필요하다. 그래서 결국 대안으로 AWS EC2를 이용해 Linux 환경을 사용하기로 했다. 사실 AWS도 공부를 제대로 하고 사용해야 하는 기술 스택이지만 아직 배움이 부..
온라인 강의를 듣고 배운 점들을 기록한다. Bcrpyt & BcryptPasswordEncoder - Spring Security에서 제공하는 암호화 기법. - 내부적으로 임의의 salt값을 이용해 평문을 다이제스트(암호문)로 변환한다. - 즉 동일한 문자열에 대한 해시 결과가 매번 다르게 나온다. - 그러므로 위 라이브러리에서 제공하는 해시 비교 메서드를 통해서 비교할 수 있다. - Bcrpyt 라이브러리의 checkpw() 메서드를 통해 평문과 다이제스트를 비교할 수 있다. - BcryptPasswordEncoder는 AuthenticationProvider의 인자 값(UserDetailServices, PasswordEncoder)의 PasswordEncoder의 구현체로 가장 사용 빈도가 높은 구..
온라인 강의를 듣고 배운 점들을 기록한다. @RequiredArgsConstructor - Lombok 어노테이션, final 필드, @NonNull이 붙은 필드에 대한 생성자를 제공한다. - 참고로 @AllArgsConstructor는 모든 필드에 대한 생성자를 제공한다. - Controller에서 주입되는 Service나 Service에서 주입되는 Repository 등을 final 필드로 선언할 때 주로 사용하는 것 같다. schema.sql & data.sql - SpringBoot에서 resources 디렉터리 아래에 위 파일들이 있다면, 내용을 읽어서 해당하는 DDL, DML을 수행한다. - 특히 JPA와 H2 DB를 사용할 때 ApplicationRunner를 사용하지 않고 초기 DB 형태를..