Spring 11

docker와 github action으로 cicd 배포하기

들어가기에 앞서 참고한 포스팅 목록은 글 하단에 모두 기재하겠습니다. 이전에 ec2 서버 배포를 해본 적이 있는데 develop에 머지할 때마다 새롭게 서버를 열어줘야 해서 정말 불편했다.그래서 무중단 배포 cicd를 구현하려고 했고, 이때 도커와 함께 사용하면 편리하다고 해서 적용해봤다! 도커가 무엇인지는 이전 포스팅 참고!  1. SpringBoot 프로젝트를 Docker Image로 만들기1) JAR 파일 생성하기IntelliJ 우측의 Grade을 클릭한 후, Tasks > build > bootJar을 클릭하여 jar 파일을 생성한다! 2) DockerFile 스크립트 생성하기FROM openjdk:17# 타임존 설정을 ENV 설정보다 먼저 수행RUN ln -sf /usr/share/zoneinf..

Spring 2025.03.18

도커(Docker) 이해하기

docker와 github action으로 cicd 배포를 해보려 했다.근데... docker가 뭐지? 이름은 많이 들어봤는데 정확히 무엇인지는 몰라서 이번 기회에 알아보려고 한다.  1. 도커란?도커란 쉽게 말해, 서버에 설치되어 있는 다양한 프로그램과 데이터를 각각 독립된 환경에 격리시키는 소프트웨어다. 도커는 '도커 엔진'이 있어야 컨테이너를 생성하고 구동할 수 있다.  사실, 엔진만 필요한 것은 아니고 '컨테이너 이미지'라는 것도 필요하다.'컨테이너 이미지'란 모든 파일과 환경 설정을 지니고 있는 파일을 말한다.도커의 핵심적인 역할서버 환경을 격리시키는 것이다. why?대부분의 프로그램은 단독으로 동작하지 않고, 특정 실행 환경이나 라이브러리, 다른 프로그램을 이용해 동작한다.위의 사진처럼 한 쪽..

Spring 2025.03.18

JWT & 전반적인 로그인 과정 이해

저번 포스팅에서 spring security를 설정하며 "인증" , "인가" 과정에서 인증에 대해 알아봤다.https://oyatplum.tistory.com/55 interceptor의 과정을 거쳤다. 하지만.. 생각해보니 spring security를 쓰면 되는 거 아닌가? 인증" data-og-host="oyatplum.tistory.com" data-og-source-url="https://oyatplum.tistory.com/55" data-og-url="https://oyatplum.tistory.com/55" data-og-image="https://blog.kakaocdn.net/dna/ipkEs/hyXWs6emrg/AAAAAAAAAAAAAAAAAAAAAEcbjPW3cAKbcc3cya_UPeEbD_RfsjBqS67wfWijbZVw/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1769871599&allow_ip=&allow_referer=&signature=oX5%2FSa6ks5udM122otkXj4%2BqhYs%3D

Spring 2025.01.11

Spring Security 사용하기

문제 상황https://oyatplum.tistory.com/54토큰 처리를 전역적으로 하기 위해aop를 사용한 커스텀 어노테이션 -> interceptor의 과정을 거쳤다. 하지만.. 생각해보니 spring security를 쓰면 되는 거 아닌가? 인증 인가를 내가 담당하지 않아서 리팩토링하다가 발견했다.그런김에 spring security와 토큰에 대해 정확히 알아보면 좋겠다싶어 공부함Spring Security란, 동작과정spring에서 제공하는 인증(Authentication)과 인가(Authorization)에 대한 처리를 위임하는 프레임워크이다.spring securiy는 '인증'과 '인가'에 대한 처리를 filter흐름에 따라 처리한다. filter는 위와 같이 요청이 dispatcher s..

Spring 2025.01.09

Interceptor로 토큰 전역 처리하기

문제 상황https://oyatplum.tistory.com/53 이전 포스팅을 참고하면,AOP를 사용하여 토큰 검증을 커스텀 어노테이션을 통해 처리했다.매 controller마다 토큰을 검증하는 과정이 사라져 효율적이라고 생각했지만, 이 역시 로그인이나 회원가입과 같은 소수의 api를 제외하면 모두 커스텀 어노테이션을 컨트롤러에 작성해야 했다. 더 효율적으로 토큰을 전역 처리할 수는 없을까?  Interceptor로 토큰 전역 처리하기Interceptor란, 말 그대로 "낚아채다"라는 의미이다.즉, 서버로 들어온 Request 객체를 controller의 handler(요청한 url에 따라 실행되어야 할 메서드)로 도달하기 전에 낚아채서 추가적인 작업을 한 뒤, 헨들러로 보내주는 것이다. @Compon..

Spring 2025.01.07

AOP로 jwt token 검증하기 - 커스텀 어노테이션, ThreadLocal 사용

들어가기 전 문제 상황@PostMapping("/logout")@Operation(summary = "로그아웃 API", description = "로그아웃")public ApiResponse logout(@RequestHeader("Authorization") String token) { if (!token.startsWith("Bearer ")) { return ApiResponse.onFailure("400", "유효하지 않은 토큰 형식입니다.", null); } String tokenWithoutBearer = token.substring(7); try { Long userId = jwtUtil.getUserIdFromToken(tokenWithout..

Spring 2025.01.03

커스텀 어노테이션으로 중복 코드 개선하기

들어가기 전 문제 상황https://github.com/UMC-TripPiece/TripPiece-backend/pull/82기존의 커스텀 어노테이션은@Documented@Constraint(validatedBy = UserExistValidator.class)@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)public @interface ExistUser { String message() default "해당하는 유저가 존재하지 않습니다."; Class[] groups() default {}; Class[] payload() default {};}..

Spring 2025.01.03

스프링 기초4

회원 관리 예제를 웹 mvc를 통해 개발해보겠습니다. 회원 웹 기능 - 홈 화면 추가 회원 웹 기능 - 등록 회원 웹 기능- 조회 1. 회원 웹 기능 - 홈 화면 추가 이전 시간까지 열심히 만들어 놓은 멤버 컨트롤러를 통해 회원을 등록하고 조회하는 기능을 만들어보겠습니다. 먼저 아주 단순한 홈 화면을 추가해봅시다. HomeController를 생성하고 localhost:8080에 home.html을 호출했습니다. 그리고 이렇게 단순한 html을 생성한 뒤 실행하면 잘 뜨네용 그런데 이상한 점이 있습니다. 뭘까용?? 분명 이전에 static으로 index.html을 welcome page로 만들어 줬는데 뜨지 않네요. 그 이유는 우선 순위 때문입니다. welcome page와 같은 정적 컨텐츠는 스프링 컨..

Spring 2024.02.01

스프링 기초3

스프링 빈을 등록하고 어떻게 의존 관계를 설정하는 지 알아봅시다. 컴포넌트 스캔과 자동 의존 관계 설정하기 자바 코드로 직접 스프링 빈 등록하기 1. 컴포넌트 스캔과 자동 의존 관계 설정하기 기존에 만든 서비스에 화면을 붙이려고 합니다. 즉, 실제로 회원 가입을 하고 회원 가입된 결과를 html로 보여주려고 합니다. 그러려면 컨트롤러와 뷰 템플릿이 필요하겠죠? 우선 멤버 컨트롤러를 만들 것입니다. 멤버 컨트롤러는 멤버 서비스를 통해서 회원 가입하고 데이터를 조회할 수 있어야 합니다. 이런 것을 서로 의존 관계가 있다고 표현합니다. (멤버 컨트롤러가 멤버 서비스를 의존한다.) controller package에 MemberController를 생성했습니다. 그리고 @Controller 어노테이션을 작성해줍..

Spring 2024.01.28

스프링 기초2

회원 관리 예제를 만들어 봅시다. 비즈니스 요구 사항 정리 회원 도메인과 레포지토리 생성 회원 레포지토리 테스트 케이스 작성 회원 서비스 개발 회원 서비스 테스트 1. 비즈니스 요구 사항 정리 가장 간단한 요구 사항으로 진행합니다. - 데이터 : 회원id, 이름 - 기능 : 회원 등록, 조회 - 아직 데이터 저장소가 선정되지 않음(가상의 시나리오. 즉 db가 결정되지 않음) 컨트롤러는 지금까지 사용했던 컨트롤러. 서비스는 '중복 회원 가입 불가' 등의 핵심 비즈니스 로직. 도메인에는 데이터 베이스에서 저장하고 관리하는 객체 리포지토리는 도메인 객체를 가지고 핵심 비즈니스 로직(서비스)이 동작하도록 구현. 구현할 클래스의 의존 관계는 다음과 같습니다. 회원 비즈니스 로직에는 MemberService. 회원..

Spring 2024.01.27