IT/개발 기록

[RestApi] 서버개발하기 (Spring Legacy + myBatis + postgreSQL)

JJo 2018. 10. 29. 18:17


RestApi 서버개발하기




환경구성


1. Spring Legacy Project + myBatis + postgreSQL + tomcat


※참고

2018/10/14 - [IT/Java-Spring] - JDK 8 다운로드 및 설치 방법

2018/10/14 - [IT/Java-Spring] - [Spring] STS 다운로드/설치 및 기본설정

2018/10/14 - [IT/Java-Spring] - Tomcat 다운로드 및 설치

2018/10/18 - [IT/DB] - [PostgreSQL] Windows에서 다운로드 및 설치 (+pgAdmin)

2018/10/25 - [IT/Dev Tool] - [Postman] API Test Tool 다운로드/설치 및 간단한 사용 방법


풀소스 : https://github.com/devJJo/RestApi


목표


1. Get/Post/Delete방식을 사용하여 DB에서 데이터를 가지고오고 수정/삭제 해본다.

2. MVC구조를 확인한다(해당 프로젝트에서는 api서버만을 만들지만 mvc구조를 따라감)



방식


1. Github에 올려 둔 sources를 가지고 이해가 안되었던 부분 위주로 설명



설명


1. 전체적인 구조


java단에는 constants/controller/dao/service/model로 폴더구조를 나누고

resources단에는 config/mapper/properties 설정파일들을 나누어두었다


constansts : uri를 static으로 선언해둠

model/controller/service/dao : mvc패턴

properties : DB설정정보를 가지고 있음

config : 참조하는 mapper파일 설정정보 

mapper : 실제 쿼리를 가지고 있는 xml

root-context : spring설정에서 가장 중요하다고 생각되는 설정파일(db연결/설정정보참조/bean설정등..)




2. 전체적인 흐름(헷갈렸던 부분)


root-contex.xml

root-context파일에서 아래 빨간줄 표시한 부분처럼

component-scan을 해주어야 해당 패키지에서 

어노테이션을 인식하고 빈을 주입할 수 있다.

(여러 블로그 글들을 봤었는데 예전 방식으로는 빈을 주입하지 않고 직접 상속받아 처리하게되면 component-scan을 할 필요가 없다)




ServiceImpl

아래 그림처럼 @Inject로 명시(의존관계연결)

타 블로그를 참조할 때 Autowired를 사용하는 곳도 있어 헷갈렸었는데

Inject는 자바 표준 어노테이션

Autowired는 스프링 어노테이션이란 차이를 가지고 있다






Controller

URI호출 시작부분인 컨트롤러에서는

json형식으로 데이터를 리턴해주기 위해서

아래와 같은 형식을 사용(Get방식과 Post방식)


Controller -> service -> dao 단으로 파라미터(Get)와 User객체(Post)를 계속 넘기면서

최종적으로 dao단에서 sqlSessionFactory을 이용해 해당하는 함수를 호출하여

데이터를 리턴받는다




Dao




User모델

model을 만들 때는 선언한 컬럼명과 디비의 컬럼명이 같으면

객체를 넘길 경우 자동으로 맵핑되어 결과를 리턴할 수 있다.


-> 수정 부분

변수명은 디비의 컬럼명과 같아야한다. 대소문자 상관없음 

앞에 두글자는 소문자여야 한다 그래야 빈주입이되어 디비컬럼과 맵핑된다.






처음 Rest Api 서버를 셋팅한다면 아래 Github에서 풀소스를 내려받고

maven설정정보 / root-context설정정보 / mvc 구조를 확인하고

get, post, delete방식으로 호출해보면서

자신에게 맞게 수정하면 조금 더 빠르게 익힐 수 있을 것 같다.


프로그램을 지우고 다시 설치하고

프로젝트를 지우고 다시 생성하고 여러번 하다보니 조금은 감이 온것 같기도..

회사에서는 만들어진 틀안에서 반복적인 작업을 하다보니(넥사크로 툴사용하기도 하고...)

셋팅/설정할 일이 거의 없었는데 

역시 기본 셋팅 + 구조잡는것이 반인것 같다.