프로그래밍/Spring 10

[Spring] Spring Security 5.7.0 이상 Config, desprecated

Spring Boot 3.0 이상 부터는 Spring Security 6.0 이상 버전이 적용된다. 이 전 버전들고 동일하게 SecurityConfig를 작성하고 나니 desprecated 된 (더 이상 사용하지 않는)함수들이 많아서 기록 하고자 함 extends WebSecurtyConfigurerAdapter -> SecurityFilterChain @Bean 등록 람다식 사용 EnableGlobalMethodSecurity -> EnableMethodSecurity authorizeRequests -> authorizeHttpRequests access("hasAnyRole('ROLE_ADMIN', 'ROLE_MANAGER')") -> .hasAnyRole("ADMIN", "MANAGER") any..

[Spring] 실시간 채팅 서버 구현 (STOMP, Redis Pub/Sub), 상세 시나리오

STOMP (Simple Text Oriented Messaging Protocol) WebSocket을 기반으로 한 통신 프레임워크 입니다. 서버와 클라이언트간 양방향 통신을 지원하고, Pub/Sub 구조로 되어있어 실시간 채팅을 구현하기 용이합니다. STOMP 메시지는 메시지 브로커를 통해 전송 됩니다. (Publisher -> Message Broker -> Subscriber) Publisher가 특정 Topic에 메시지를 보내면 Message Broker는 그 Topic을 구독중인 Subscriber에게 메시지를 전달합니다. 메시지 브로커는 다양한데 Redis를 사용하도록 하겠습니다. 세팅 먼저 websocket과 redis를 사용하기 위해 build.gradle 프로퍼티를 정의하고 redis ..

[Spring] Spring Message, properties 한글 깨짐 해결하기

애플리케이션에 Message를 적용할 때 한글로 입력해놓은 메시지들이 ???. 로 깨지는 경우가 있다. 설정 -> 파일 인코딩 전역 인코딩 : UTF-8 프로젝트 인코딩 : UTF-8 프로퍼티 파일에 대한 디폴트 인코딩 : UTF-8 모두 변경 후 IDE를 재시작 한다. 재시작 하면 이 전에 properties 에 입력해놓은 한글들이 ???.로 변경되어있다. 한글로 다시 입력해주고 실행하면 해결된다.

[Spring] Spring Security 회원가입/로그인 구현 예제

Spring Security로 회원가입 / 로그인을 처리 하는 예제는 아래와 같다. Spring Security 라이브러리 추가 시큐리티 설정을 할 SpringSecurity 클래스 생성 사용자 정보를 담는 UserDetails를 구현 한 PrincipalDetails 클래스 생성 시큐리티에서 유저의 정보를 가져오는 UserDetailsService를 구현 한 PrincipalDetailsService 클래스 생성 유저 정보를 담을 User 도메인 클래스 생성 회원가입 시 주고 받을 UserSaveRequestDto 생성 User를 저장 할 UserRepository 클래스 생성 회원가입 화면을 띄워줄 UserController 클래스 생성 회원가입 기능을 구현 할 UserService 클래스 생성 회원..

[Spring] iTunes Search API 사용법, 음원 정보 검색하기

나는 음악을 좋아하고 바이닐, CD 컬렉터이다 인스타그램이나 디스콕스 처럼 내 수집품을 포스팅하는 사이트를 만들고 싶었다 처음에는 유저가 직접 아티스트 명, 앨범 명을 입력할 수 있도록 하였는데 입력방식이 제각기이다 보니 데이터 정리도 안되고 앨범 아트도 직접 업로드해야하는 불편함이 있었다. 그래서 음원사이트 나 디스콕스의 Open API를 써서 음원 정보를 가져오기로 했고 그 중 Api Token이 따로 필요없고 쓰기 편한 iTunes Search API를 선택했다. 내가 원하는 기능은 아래와 같다 Input에 아티스트 명을 입력하면, Select에 입력한 아티스트의 앨범들이 추가 Select에서 앨범을 선택하면, 선택한 앨범의 장르와, 앨범아트가 디스플레이 사용 방법은 간단했다. 본인이 필요한 데이터..

[Spring] DTO, MultiPartFile 동시에 요청하기

User의 프로필을 수정하는 기능을 만들기 위해 UserUpdateDto 를 만들었다. 업데이트 내용에는 이름, 소개 글, 프로필 이미지가 포함 되는데 아래와 같이 RequestBody로 String인 username, profileText, MultipartFile인 image를 JSON타입으로 같이 받을 수 없었다. class UserUpdateDto{ private String username; private String profileText; private MultipartFile image; } 그래서 DTO에서 MultipartFile을 제외 시키고 class UserUpdateDto{ private String username; private String profileText; } Reque..

[Spring] devtools로 서버 재 시작 없이 resource(html, css, js) 반영하기, Automatic Restart

개발을 하다보면 html, css, js 을 자주 수정 할 일이 생기는데 devtools를 이용하면 서버를 재 시작하지 않고 변경내용을 반영 할 수 있다. devtools는 크게 5가지 기능을 제공하는데, 그 중 Automatic Restart를 이용하는 방법이다. Automatic Restart Property Defaults Live Reload Global Settings Remote Applications Automatic Restart (서버 재시작) classpath에 속해있는 파일이 수정되었는지 감지하고 자동으로 재시작을 해준다. 소스를 수정하고 재컴파일하면 서버가 실행중이어도 변경된 값이 반영 된다. 사용방법은 devtools 의존성 추가하면 끝이다. 의존성 추가 (gradle 기준) im..

[Spring] 패키지 구조 - 계층형/도메인형

Spring 패키지 구조는 계층형 / 도메인형 으로 나눌 수 있습니다. 계층형 구조 계층형으로 디렉터리를 구성합니다. - controller, service, repository, domain, exception, dao ... 등 장점 구조 파악이 빠르다 단점 디렉토리에 클래스들이 너무 많이 모인다. 도메인형 구조 도메인 기준으로 디렉터리를 구성합니다. - order, member, item ... 등 장점 관련 코드들이 응집해 있다. 단점 구조 파악이 어렵다.

[Spring] 빈 생명주기(Bean LifeCycle) 콜백 개념 및 방식

애플리케이션 시작시점 및 종료시점에 작업이 필요한 경우가 있습니다. ex) 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결 ex) 종료 시점에 연결 종료 스프링을 통해 초기화 작업 및 종료작업을 어떻게 진행하는지 알아보겠습니다. 스프링 빈의 생명주기 스프링 빈은 다음과 같은 생명주기를 가집니다. 객체생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료 되는데 개발자가 의존관계 주입이 끝난 시점을 어떻게 알 수 있을까요? 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 스프링은 의존..

[Spring, 디자인 패턴] DI(Dependency Injection) 의존관계 주입, 의존성 주입

DI(Dependency Injection) 의존관계 주입이란 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉입니다. 의존관계(Dependency)는 의존대상 B가 변하면 의존대상 A에 영향을 미치는것입니다. A객체에서 B객체의 기능을 필요로하는 경우 의존관계라고 표현할 수 있습니다. 김영한 님의 스프링 핵심 원리 강의를 보면 애플리케이션을 하나의 공연, 각각의 인터페이스를 배우라고 비유를 들고있습니다. 배우가 바뀌면 공연에 영향을 미치므로 의존관계라고 볼 수 있습니다. 의존관계 주입(Dependency Injection)은 의존관계를 외부에서 결정하고 주입하는 것 입니다. 의존관계 주입이 필요한 이유 아래와 같이 공연은 배우를 의존하고 배우의 구현클래스인 원빈과 장동건이 있다고 생각해봅시다. 공연의..