Spring 18

[Spring 스프링] POJO란?

우테코 레벨1때, 도메인에다가 DB를 연결하는 로직을 집어넣어서 다음과 같은 리뷰을 받았던 적이 있다. 이 때는 POJO를 외부 기술을 적용하지 않는 순수한 자바 오브젝트 라고 한문장으로만 이해하고 남어갔다. 이번에 스프링을 공부하면서 POJO라는 단어가 꽤 나오길래 이번에 토비의 스프링을 읽으면서 한번 정리해보았다. POJO POJO(Plain Old Java Object)란? 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트 매우 쉽게 말하면, 간단한 자바 오브젝트를 사용하는 것이다. 하지만 단지 자바의 문법을 지키고, 순수하게 Java API만을 사용했다고 해서 그 코드를 POJO라고 할 순 없다. 위의 정의에서 볼 수 있듯이 객체지..

[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 스프링] JdbcTemplate 써보기

스프링 공식문서를 참조해서 JdbcTemplate 사용법을 정리해보았다. JdbcTemplate 생성 스프링 공식문서에 따르면 JdbcTemplate을 생성하는 방법은 두가지가 있다. 1. DAO 구현체가 DataSource를 통해 JdbcTemplate를 직접 인스턴스화 2. 스프링 IoC 컨테이너에서 DAO에게 빈 참조로 제공 하지만 프로젝트의 의존성에 spring-boot-starter-jdbc 모듈을 추가한다면 스프링 부트가 DataSource와 JdbcTemplate 객체를 자동으로 IoC 컨테이너에 설정해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' } 그러니까 우리는 IoC 컨테이너에 ..

[Spring 스프링] JDBC, JDBC 드라이버, JDBCTemplate

용어들이 다 비슷하게 생겨서 헷갈렸는데, 이참에 한번 정리해보았다. JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 연결할 때 사용하는 API이다. 일반적으로 데이터베이스에서 데이터를 가져오는 과정은 다음과 같이 이루어진다. 1. 데이터베이스로 커넥션 연결 2. 데이터베이스에 SQL 전달 3. 데이터베이스가 결과를 응답 하지만 데이터베이스의 종류는 MySQL DB, Oracle DB 등 매우 많다. 큰 과정은 동일할지라도 각각 사용법이 다르다. 데이터베이스를 변경할 때마다 애플리케이션의 데이터베이스 접근 코드도 변경해야한다고 생각해보자. 너무 끔찍하다. 그래서 JDBC는 위 3가지 공통적인 기능을 표준 인터페이스로 정의해서 제공한다. java.sql.Conne..

[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