전체 글

싸피 비전공9기 비전공자바 서식하는 초보개발자 백준 - https://www.acmicpc.net/user/esu08259 깃허브 - https://github.com/qkrrlgus114
· 오류해결
현재 서버에 배포한 Swagger로 테스트를 진행하는데 계속 403 에러가 발생했다. 이것도 마찬가지... 근데 이상한 점이 있었다 GET 요청은 응답이 제대로 온다. 서버 로그를 찍어봤는데 GET 요청 말고는 JWT필터도 타지 않는다. 즉 시큐리티도 안들어오는데 이상하다 분명 먼저 내용을 찾아보니 csrf를 허용해놓으면 post, patch, delete, put이 403이 뜰 수 있다고 했다. // csrf 보호 비활성화 .csrf(AbstractHttpConfigurer::disable) 근데 시큐리티 설정에 disable을 이미 해놨기에 이 부분은 패스했다. 알고보니 결국 cors 문제였다. 내가 알기로는 cors 문제가 생기면 swagger에서 cors 문제라고 알려줬었는데 왜 안떴는지 아직은 ..
스프링부트 : 3.20 현재 백엔드는 정상 배포를 해놨지만 스웨거는 로컬에서만 사용했다. 이렇게 서버가 http://localhost:8080으로 두고 뒤에 api 경로를 넣어서 테스트를 진행했었는데 스웨거를 반만 사용하는 느낌이 들었다. API 명세를 간편하게 관리한다는 장점이 있지만, 동시에 프론트가 따로 postman이나 로컬 서버를 켜지 않더라도 스웨거 테스트를 통해 입력과 출력을 봐야 한다는 생각이 들었다. 그래서 배포해놓은 주소로 스웨거를 들어가봤다. 들어가지긴 하는데 기본 서버가 http://localhost:8081로 잡혀있다. 근데 여기서 의문이 생겼던 점은 왜 8081로 잡히는가? 였다. 현재 로컬에 있는 yml과 도커에 있는 yml은 다른 게 없다. 심지어 스프링부트 포트 설정도 그대..
스프링 부트 : 3.2.0 여태 SSAFY에서 진행했던 프로젝트에는 프론트에서만 유효성 검사를 진행했다. (?) 그 당시에는 '값만 제대로 넘겨주면 상관없지 않나? 귀찮다' 이 생각이었는데 만약에 값이 수정되거나 잘못된 경로로 들어오게 된다면? 서버에서 문제가 발생하게 된다. 이걸 막아주기 위해서 서버에서도 유효성 검사를 필히 진행해야한다. 우선 유효성 검사를 진행할 부분은 총 3가지로 판단했다. Entity Entity는 기존에 제약조건을 걸어두었던 상태다. 그러나 제약 조건은 테이블을 만들 때 해당 조건에 따라 테이블이 생성되는 것일 뿐. 만약에 조건에 부합하지 않는 값이 들어오면 DB에서 에러를 뱉어내게 된다. Entity에도 유효성 검사를 진행했던 이유는 빌더를 통해 객체를 생성하는 데 이때 유효..
Service의 테스트코드를 작성하다가 아래의 문제를 마주쳤다.즉 User라는 클래스에 id가 null인 경우다. @BeforeEach void set_up(){ // given accessToken = "test_access_token"; userId = 1L; mockUser = User.builder() .email("test@test.com") .profileImage("test") .n..
· 오류해결
우선 테스트하려고 하는 2개의 클래스이다. Scrum @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "team_id") private Team team; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; @Column(nullable = false) private String name; @CreatedDate @Column(nullable = false) private LocalDateTime createdDate; @Colum..
· 기타
JPA로 테이블을 설계하면서 우선 지킬 것이 몇 가지 있었다. 1. 일단 LAZY로 선언 EAGER로 선언하면 연관 관계에 있는 Entity까지 전부 쿼리를 날려서 조회하기 때문에 쓰이지 않는 경우에 너무 자원 소모가 심하다고 생각했다. 그래서 프록시 객체로 조회하도록 LAZY를 우선으로 사용했다. 2. 연관 관계를 사용해야 할 경우 FETCH JOIN을 사용해서 하나의 쿼리로 처리하기. 결국 LAZY를 사용해도 해당 객체에 접근하게 될 경우 쿼리를 날려서 가져오게 되면서 N+1 문제가 발생한다. 이를 방지하기 위해 FETCH JOIN을 사용해서 하나의 쿼리로 연관 관계에 있는 객체를 가져오도록 만들었다. 그러다가 문득 FETCH JOIN을 안쓰면 진짜 쿼리가 N+1로 날라가는지 궁금해서 테스트를 해봤다..
· 오류해결
현재 프로젝트를 진행하면서 http://localhost:8080으로 요청을 보내면 시큐리티의 oauth2Login()이 동작하는 기상천외한 문제가 발생했다. // 모든 요청 허용 .authorizeHttpRequests(authorize -> { // 모든 api로 시작하는 요청은 인증 필요 authorize.requestMatchers("/oauth2/authorization/", "/swagger-ui/**", "/api-docs", "/v3/api-docs/**", "/api-docs/**", "/swagger-ui.html").permitAll(); authorize.anyRequest().authenticated(); }) .addFilterBefore(jwtFilter, UsernamePas..
· JAVA
TDD에 대해 공부하다가 Record로 이너 클래스를 만드는 경우를 볼 수 있었다. Record는 자바 14에 새로 도입되었고 자바 16에서 정식 채택된 새로운 유형의 클래스다.불변 객체를 쉽게 생성하고 다룰 수 있다는 특징이 있다. 밑에는 Record를 사용하지 않고 기존에 Java로 불변 객체를 만드는 Class다.import java.util.Objects;public final class Car { private final String name; private final int price; // 생성자 public Car(String name, int price) { this.name = name; this.price = price; } ..
indeep
indeep한 개발자