분류 전체보기 174

[스프링] 3. swagger ui 적용시키기(2)

현재까지 따라왔다면, 바로 실행하면 이상한 과정을 거치게 된다. 1. 로그인이 생겼다 이렇게 로그인이 생겼는데, 이는 Spring Security에서 기본적으로 제공하는 로그인 기능으로, 여기에 아이디와 비밀번호를 쳐야한다. 근데 회원가입을 안했잖아?? 요런식으로 콘솔을 찾아보면 비밀번호가 알려지는데 아이디에 user, 비밀번호에 여기 부분을 붙여넣으면 된다. 그러면 되냐고? 안된다. 이 부분을 조금 더 설명을 해야할 것 같다. Swagger UI를 우리가 쓰는 이유는, API 명세서를 자동으로 만들어줄 수 있다는 장점이 있고, 조금 더 정리된 상태에서 내가 만든 기능들을 확인할 수 있기 때문이다. 그런데 Spring Security는 우리가 설정하지 않으면, 만들어둔 프로젝트의 모든 페이지를 보안화시킨..

[이론정리] 스프링 시큐리티의 체인 구조 및 동작 방식

필터 체인 부터 설명을 하자면, 스프링에는 많은 필터가 존재한다. 이를 하나씩 훑어보자. SecurityContextPersistenceFilter - 요청(request)전에, SecurityContextRepository에서 받아온 정보를 SecurityContextHolder에 주입한다. LogoutFilter - 유저의 로그아웃을 진행한다. UsernamePasswordAuthenticationFilter - 주어진 아이디와 비밀번호로 로그인 인증을 진행한다. DefaultLoginPageGeneratingFilter - 추가된 로그인 방식이 없다면, 스프링 기본으로 로그인을 처리한다. BasicAuthenticationFilter - HTTP 요청의 (BASIC)인증 헤더를 처리하여 결과를 Se..

[스프링] 2. swagger ui 설정하기(1)

일단 Swagger 를 써야하는 이유에 대해 간단히 생각해보고 코드를 정리해야겠다. swagger는 api를 정리해서 관리하고, 확인하기 편하게 해준다. swagger ui를 통해 url 주소에서 적혀있는 path와, 요청의 method들을 정리해 보여준다. 이를 통해 내가 만든 페이지가 어떻게 되어있고, 분류나 기능들을 한번에 볼 수 있다. 코드를 정리해보자면, 계층적으로는 api apiInfo apiKey securityContext defaultAuth 로 이루어져 있으며, 코드는 아래와 같다. @Import(BeanValidatorPluginsConfiguration.class) @Configuration @EnableWebMvc // http://localhost:8080/swagger-ui/i..

[스프링] 1. CORS 설정해주기

일단 프로젝트를 만들 때, 버전 2.7.0에 자바는 버전 11로 맞추어주었다. 주변에서 듣기로는 제일 실무에서 많이 쓰인다고 들었기 때문이다(소문) implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.projectlombok:lombok:1.18.22' implementation 'mysql:mysql-connector-java' compileOnly '..

@Bean

정의 Spring IOC Container에 해당 Spring Bean을 등록시켜 사용하게 한다. Bean은 스프링에 의해 생성되고 관리되는 객체들을 말하며, 여기에 다른 객체를 추가할 때 @Bean 어노테이션을 넣어 객체를 추가시킬 수 있다. 여태까지 공부했던 과정에서는, @Configuration어노테이션을 넣은 클래스를 스프링 설정에 사용할 수 있으며, 여기에서 사용할 객체들을 @Bean어노테이션과 메서드를 통해 스프링 빈으로 등록해, 사용할 수 있다. 특징 @Component, @Bean 두가지 방식이 있다. @Component 컴포넌트로 설정해준다는 뜻이며, 이 때 ComponentScan을 통해 어디서부터 컴포넌트를 불러와 사용할지 등을 정해주어야 한다. @Bean 스프링 빈에 자동 등록되어,..

@Configuration

정의 Congifuration은 설정을 만들거나, 내부에 @Bean을 만들기 위해 클래스에 적용시키는 어노테이션이다. 클래스에 Configuration 어노테이션을 등록하면 해당 클래스를 설정에 대해 사용해줄 수 있고, @Bean을 통해 SpringBean을 등록할 수 있다. 특징 @Configuration을 통해 해당 클래스가 설정에 대한 파일임을 알 수 있다. 내부의 메서드(Bean으로 호출된)을 가져올 경우, 클래스를 호출해 내부의 메서드를 호출하는 방식이 아닌, 메서드만을 호출하는 방식이다. 또한, 내부에 @Bean을 통해 Spring Bean을 등록할 것임을 알 수 있다. 주의점 : @Configuration은 Bean을 등록하기 위한 어노테이션이라는 것은 아니다. 방식 public class ..

[JPA] 17. 로딩(미안하다 이거보여주려고 어그로끌었다.)

프록시를 배워서 그래서 뭘 어떻게 하는걸까??? 프록시를 이용해 데이터를 한번에 우다다 DB에서 가져올 필요가 없어진다. 예를 들어, 게임 로그인을 해서 캐릭터를 불러왔다고 해보자. 길드, 친구멤버들의 정보 모두, 장비들, 스킬들, 펫, 아이템들 등등.... 전부를 한번에 불러온다??? (내가봤을 때 로그인할 때 마다 게임 터진다...) 이를 대비해서 지연로딩이 존재한다. 지연로딩을 통해, 연관된 객체들을 전부 불러오는게 아니라 그놈의 프.록.시 로 불러온다. @~~To~~의 외래키 조인을 할 때, (fetch = FetchType.~~)을 통해 즉시로딩과 지연로딩을 정할 수 있다. 이런식으로 만들어진 상태에서 Member를 영속화 시킨 후, 영속성 컨텍스트를 clear시킨다고 해보자. 이 후 Membe..

[개발생각] 우테코 문제 풀어보기 - 자동차 경주 게임

이양야야야야야야야야야야ㅑ야야야야야야ㅑ! Source Code : https://github.com/JangAJang/WoowaCourse_Preview/tree/main/자동차%20경주%20게임 조금 더 정리된 알고리즘 문제 같다는 생각이 든다. 그리고, 이 문제를 통해 더욱 새로운 생각이 들기 시작했다. 전체적으로 코드를 만드는 하나의 과정을 이 프로젝트를 통해 최종적으로 만든 것 같다. 기능 목록을 작성한다(여기에서 시간을 30~50%쓰는 것 같다. 그만큼 생각하고 작성해야 더 효율적이고 정확한 코드가 나오는 것 같은 기분이다. 도메인의 작동방식, 예외가 되는 부분들, 그리고 컨트롤러에서 이를 모아 어떻게 동작할지 생각한다. ) 도메인 클래스를 생성한다 : 클래스의 메서드는 그저 출력형식, 입력변수만..

장's 개발생각 2022.12.13

[개발생각] 리세마라 : 다시해보는 우테코 5기 4주차

한장 요약 : 이놈(enum)을 잘쓰자 Source Code : https://github.com/JangAJang/WoowaCourse_Preview/tree/main/4주차_다리_re 사실 시험기간이 겹치며 우테코 문제를 풀고 편하게 블로그를 쓸 여유가 없었다. 블로그의 대부분의 글을 위해 5분정도 쓰는 내용들을 타이핑하고, 10분 정도 짤을 찾다보니(?) 조급한 시험기간에 글을 쓸 생각을 못하게 된다. 일단 몇가지 스스로 고쳐야 할 사항들을 머리속에 새겨둔 상태였다. 1. 일급 컬렉션(리스트 같은 변수)은 도메인을 따로 만들어서 그 외의 인스턴스가 없게 하자. - 이번 우테코 프리코스를 하며 다른 분들의 이야기를 들어보며 느낀건, List나 HashMap같은 인스턴스가 존재할 때 다른 인스턴스를 만..

장's 개발생각 2022.12.13

[JPA] 16. 프록시? Proxy? FrogC? 개구리씨?

한짤 요약(이 아닙니다) 프록시를 공부하기 이전에 이전에 영속성 컨텍스트에서 엔티티를 가져와 사용하거나, DB에서 데이터를 가져와 객체로 사용했던 이전의 과정을 기억해보았다. 왜? 프록시는 이 부분에서 엔티티를 사용할 때 마다 데이터를 불러오고, 영속화시키고, 영속성 컨텍스트에서 찾아오고를 줄여주기 위한 녀석이다. Proxy, 영어로 '대리인' 이라는 뜻이 있다. 말 그대로 엔티티에 대한 대리인의 역할을 한다. 대리인, 혹은 복제품, 혹은 가짜라고 다른 글들에서 언급이 되어있다. 그 말대로, 프록시는 원본 객체가 아닌 원본에 대한 복제품을 가져오는 것이다. 가져오는 방법은, EntityManager.find()를 사용하는 것이 아닌, EntityManager.getReference()를 사용하는 것이다...