본문 바로가기

Web/Spring

(4)
[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이 없다는 것이다...
[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..