본문 바로가기

Web

(6)
[CORS] Spring Security에서 Preflight CORS 문제 해결하기 문제 상황 1 2 3 4 5 6 @RestController @RequestMapping("/members") @CrossOrigin(origins = "*") public class MemberController { // ... } cs Controller의 어노테이션으로 @CrossOrigin를 달아서 잘 작동하던 Controller가 CORS에러를 뿜기 시작했다. 해석해 보면 preflight요청이 Access-Control-Allow-Origin 헤더가 없어서 통과하지 못했다는 것이다. 여기서 Preflight가 무엇인지부터 알아보자. 1. Preflight란 무엇인가? CORS의 사전 작업으로 Chrome과 같은 브라우저에서 HTTP Method "OPTIONS" Request로 서버측에 먼저 ..
[Spring] JPA 테이블 생성 오류 JPA를 이용하여 Entity로 Table을 만들 때 오류가 생겼다. org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "create table like (article_id bigint not null, member_name varchar(255) not null, liked bit, primary key (article_id, member_name)) engine=InnoDB" via JDBC Statement DDL 문법에 오류가 있다는 소리 같다. 곰곰히 생각해보니 Like라는 테이블을 만들고 싶었는데 like는 이미 MySQL의 예약어로 있는 단어다. 1234@Entity@Table(name="likes")..
[Web / Spring] EntityManager로 JPQL 사용 시 단일 Entity 찾기 ( No entity found for query ) 문제 상황 회원 가입을 할 때, 원래 PK로 설정된 name으로 중복 검사를 했는데 email로 검사하는 것으로 바꿨다. 그런데 이전에 회원가입한 회원은 로그인이 되는데, 신규 회원가입은 되지 않는 상황이 발생했다. findByEmail 메소드에서 에러를 뿜고 있었다. No entity found for query라는 것을 보고 두 가지 생각이 났다. 1. query가 잘못됐다. 2. query는 정상이고 말 그대로 query에 맞는 entity를 찾지 못했다. 신규 회원가입자는 DB에 없는 email을 넣어야 회원 가입이 되므로 당연히 query의 결과로는 아무것도 없어야 한다. 결국 No entity found for query라는 에러의 의미는 query의 결과 중복되는 email이 없다는 것이다...
[Web] Session vs JWT Session과 JWT Session방식의 Authentication / Authorization 방식은 구현하기 쉽지만, 분산 처리를 해야 하는 경우 문제가 생깁니다. 먼저 Session을 사용하는 2가지 방식에 대해서 알아보고, 어떤 문제가 생기는지 알아보겠습니다. Sticky Session Load Balancer가 특정 Client의 Session 정보를 가지고 있는 Server Instance로 연결해줍니다. 이는 두 가지 문제점을 안고 있습니다. 1. 특정 서버가 장애가 생긴다면? Server Instance2가 장애가 생겼을 때, Client2의 요청은 어디로 가야할까요? Session정보는 Server Instance2만이 가지고 있으므로 기존 Session 정보는 사용할 수 없게 됩니다...
[HTTP] Header에서 "X-" prefix 지양 "X-" prefix는 왜 쓰는걸까? 가끔 Header를 보면 X-Auth 와 같은 "X-" prefix를 사용하는 것을 볼 수 있다. 이 "X-" prefix들은 "eXperimental" , "eXtension"의 약자로 표준 헤더와 비표준 헤더를 구분하기 위해 오랫동안 사용되었다. 왜 사용 지양으로 바뀌었는가? 이 "X-" prefix로 해결되는 문제보다 이로 인해 생기는 문제가 더 많아져, RFC6648에서는 "X-" prefix 사용을 지양하라고 말하고 있다. "X-" prefix 를 사용하여 생기는 문제로 비표준이었던 Header가 표준으로 바뀌었을 때 이를 처리하는 비용이 커진다고 한다. References https://datatracker.ietf.org/doc/html/rfc6648 r..
[Spring] Query Parameter와 Path Variable HTTP GET 메소드로 데이터를 교환할 때 어떤 방식으로 사용해야 할지 알아본다. Query Parameter /user?occupation=programmer Query Parameter는 resource의 필터링이나 정렬이 필요할 때 사용한다. 위의 경우 user들 중 직업이 programmer인 user만을 가져온다. 1 2 3 4 5 6 @GetMapping("/user") public String getByQueryParameter(@RequestParam("occupation") String occupation){ System.out.println(occupation); // output : programmer } Colored by Color Scripter cs Spring에서는 @Req..