스프링 17

[우아한테크코스] 레벨2 - 웹 자동차 경주 미션 회고

레벨1의 첫 주에서는 콘솔에서 동작하는 자동차 경주 미션을 구현했었다. 이번 미션은 레벨1에서 구현했던 자동차 경주 미션 코드를 가져와서 웹 기반에서도 동작하도록 기능을 추가 및 수정하도록 하는 미션이었다. 그래서 결과적으로는 콘솔과 웹 모두에서 자동차 경주 게임을 할 수 있도록 만들어야 했으며, 콘솔 어플리케이션과 웹 어플리케이션에서 겹치는 중복 코드는 최대한 없애야 했다. 👇레벨1 자동차 경주 미션때 작성했던 코드👇 GitHub - hectick/java-racingcar: 자동차 경주 게임 미션 저장소 자동차 경주 게임 미션 저장소. Contribute to hectick/java-racingcar development by creating an account on GitHub. github.com..

[Spring 스프링] Spring MVC - ControllerAdvice(@ControllerAdvice와 @ExceptionHandler를 이용한 예외처리)

ControllerAdvice 예외처리를 하기 위한 @ExceptionHandler 어노테이션은 일반적으로 @Controller 또는 @RestController 어노테이션이 달린 클래스에 있는 메서드에 달 수 있다. 하지만 @ControllerAdvice, @RestControllerAdvice(@ControllerAdvice + @ResponseBody) 클래스 안에도 달 수 있다. 여기다가 달면 모든 컨트롤러에 적용된다. 이 점을 이용해서 예외처리 부분을 별도의 컨트롤러로 빼낼 수 있다. @RestControllerAdvice public class ExceptionController { @ExceptionHandler({IllegalArgumentException.class, NullPointer..

[Spring 스프링] Spring MVC - Annotated Controllers(@Controller와 @RestController)

Annotated Controllers 스프링 MVC에서 컨트롤러임을 나타내는 어노테이션으로는 @Controller 와 @RestContoller가 있다. @RestController는 @Controller와 @ResponseBody를 합친 것이다. @ResponseBody가 하는 일이 뭘까? @ResponseBody 어노테이션은 HTTP Response Body에 데이터를 넣어주는 일을 한다. 따라서 이 어노테이션이 달린 메서드는 HTTP Response Body에 데이터를 넣어 반환한다. @Controller 와 @RestController @Controller와 @RestController의 주요한 차이점은 메서드가 무엇을 반환할 수 있는가?이다. @RestController는 메서드가 객체를 반환..

[Spring 스프링] @Component, @Repository, @Service, @Controller 는 뭐가 다를까

프로그램을 짜면서 @Component를 달아보기도 하고, @Repository로 바꿔서 달아보기도 했다. 근데 둘 다 프로그램이 잘 돌아간다. 궁금해져서 차이점을 찾아봤다. 🐣 컴포넌트 스캐닝 @ComponentScan 어노테이션을 달고있는 어플리케이션이 위치하는 패키지 내에서 이루어진다. 컴포넌트 스캐닝을 통해 @Component 어노테이션이 달린 클래스들을 빈으로 만든다. 🐣 @Component 스프링에서는 @Component을 사용하여 빈을 선택하고 등록한다. 🐣 @Repository, @Service, @Controller 각각의 어노테이션을 까고 들어가보면 @Component라는 어노테이션을 달고 있음을 확인할 수 있다. @Component가 일반화된 어노테이션이라고 생각하면 된다. 대충 코드를..

[Spring 스프링] consumes와 produces의 차이

produces 컨트롤러가 생산해서 클라이언트에게 반환하는 메시지의 형식을 지정 요청 헤더에서 Accept 헤더와 produces가 일치해야 함 @GetMapping(path = "/users", produces = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서드 왈: 내가 보내는 응답은 json 형식이란다^.^~ consumes 컨트롤러가 클라이언트로부터 받아서 소모하는 메시지의 형식을 지정 요청 헤더에서 Content-Type 헤더와 consumes가 일치해야 함 @PostMapping(path = "/users", consumes = MediaType.APPLICATION_JSON_VALUE) 컨트롤러에서 위의 어노테이션을 달고 있는 메서..

[Spring] java.sql.sqlexception 소켓에서 읽을 데이터가 없습니다 에러 / c3p0, commons dbcp2 커넥션풀 사용

스프링, 이클립스, 오라클DB, c3p0을 이용해서 개인 프로젝트를 하는 중이다. 사용자의 지시로 디비에 접근하는 명령은 괜찮은데, 서버에서 스케줄링으로 디비에 접근하려고 하면 소켓에서 읽을 데이터가 없다고 나온다. 이거 고치려고 2분만 2분만 하면서 코딩하다가 12시에서 새벽 3시 반이 되었다. 근데 못고쳤다. 코드를 한줄 한줄 로그를 찍어서 테스트했다. 내 코드는 코드를 실행하면서 dao가 c3p0의 ComboPooledDataSource 커넥션풀에서 커넥션을 가져와서 DB에 연결한다. 커넥션풀을 통한 db 연결이 처음엔 잘 된걸 보면, 프로그램이 돌아가다가 중간에 이 연결이 끊기는 것 같다고 추측했다. 9월 1일 목요일 오늘 학교에 등교해서 밥먹기전에 한번 돌려봤는데 된다. 어이가 없네 두고보자. ..

[Spring] 스프링 - 리액트 연동 과정에서 생긴 CROS 에러

프론트엔드(리액트)와 백엔드(스프링)을 연동하는 과정에서 아래와 같은 에러가 났다. 나는 스프링을 이용해 백엔드 서버를 하고 있고, 친구가 리액트를 이용해 프론트엔드를 맡고 있다. 로컬 환경에서 postman을 이용해 응답 테스트를 할 때는 잘 돌아갔다. AWS에서 서버를 만들어서 톰캣서버를 만들고 프로젝트를 올려 postman을 이용해 응답 테스트를 할 때도 잘 돌아갔다. 크롬에 새 창을 켜서 url로 get요청을 보내면 잘 작동한다. 그러나!!! 근데 리액트랑 연동만 하니 CROS 에러가 나타났다. CORS란? Cross-Origin Resource Sharing(교차 출처 리소스 공유)의 약자이다. 정확히 CORS가 뭔지는, 프로젝트가 끝난 후 시간이 생겼을때 공부해서 포스팅을 하도록 하겠다.(추후..

1 2