[회고록] 21.07.19~21.07.25

Namgon·2021년 7월 25일
0

회고

목록 보기
7/8

회고록

코로나가 심해지면서 교육이 비대면으로 전환됐다. 먼거리를 이동하며 교육을 듣던 나에게는 좋은 소식이었지만, 집에서 온라인으로 교육을 듣다보니 확실히 집중력을 유지하는게 어려운 일이었다. 물론 오프라인에서도 집중력이 좋았다는 건 아니다ㅎ 평소 백엔드 직무를 희망하고 있는 나로서는 이번에 진행하는 스프링에 집중하여 공부할 필요가 있었다. 그렇기에 교육에 최대한 집중해 원하는 배움을 얻을 것이다!!

멀 배웠는데?

SpringBoot + Oracle + Mybatis 웹 서비스 CRUD 실습을 진행했다.

Spring과 Oracle DB + MyBatis 연동

  • application.properties 설정
    # Oracle
    spring.datasource.hikari.driver-class-name=oracle.jdbc.driver.OracleDriver
    spring.datasource.hikari.jdbc-url=jdbc:oracle:thin:@localhost:1521:XE
    spring.datasource.hikari.username=DB아이디
    spring.datasource.hikari.password=DB비밀번호
  • oracle과 jdk버전에 맞는 ojdbc.jar를 프로젝트에 추가
    • ojdbc8.jar (oracle 12.1 & jdk 1.8)
  • 인텔리제이인 경우 프로젝트 gradle 외부 라이브러리 및 모듈에 ojdbc 연동
    • 나는 이게 안되서 프로젝트에 lib폴더 생성 후, gradle에 직접 매핑
// build gradle file
implementation ('lib/ojdbc8.jar')
  • 데이터베이스+MyBatis와 스프링 연동을 위한 Configuration 클래스 생성
    // DatabaseConfiguration.java
    
    ...
    
      @Bean
      public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception{
          SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
          sqlSessionFactoryBean.setDataSource(dataSource);
          sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:/mybatis/**/*.xml"));

          return sqlSessionFactoryBean.getObject();
      }

      @Bean
      public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory){
          return new SqlSessionTemplate(sqlSessionFactory);
      }
    ...
  • DB 커넥션 테스트 및 연동 완료

Spring에서 Controller, Service, DAO(Mapper), DTO

Web Browser <--> Controller <-> Service <-> DAO(Mapper) <-> Oracle DB 
  • Controller
    컨트롤러는 웹 브라우저의 요청을 전담하여 처리한다.
    Controller가 Service를 호출한다.
@Controller
public class MemberController {
	
    @Autowired
    private MemberService memberService;
    
    ...
    @RequestMapping("/admin/list")
    public String list(HttpServletRequest request) {
    	...
    	List<MemberDTO> list = service.list(map);
        ...
        request.setAttribute("list", list);
        
        return "/member/list";
    }
}
  • Service
    Service는 비즈니스 로직을 수행한다.
    데이터베이스에 접근하는 DAO를 이용해 결과값을 받아온다.
@Service
public class MemberService {
	
    @Autowired
    private MemberMapper mapper;
    
    public List<MemberDTO> list(Map map) {
         return mapper.list(map);
    }

}
  • DAO (Mapper)
    DAO는 데이터베이스에 접속해 비즈니스 로직에 필요한 쿼리를 호출한다.
    여기서는 mybatis를 이용해 해당 쿼리를 알맞게 mapping한다.
// interface memberMapper class
public interface MemberMapper {
	...
    List<MemberDTO> list(Map map);
}
<!-- member.xml -->
<select id="list" parameterType="Map" resultType="MemberDTO">
  select *
  from   member
  
</select>
  • DTO
    계층 간(view, controller, service, dao, db) 데이터를 주고 받을 때 사용하는 객체를 말한다.
import lombok.Data;
 
@Data
public class MemberDTO {
    private String id       ; 
    private String passwd   ;
    private String name    ;
    ...
}

RestController

하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념의 전송방식을 결합

  • REST는 HTTP메소드 리소스에 대한 행위를 정의한다.
    CRUD 4가지의 메소드가 존재한다(GET/POST/PUT/DELETE)
  • 리소스는 json, xml 등과 같은 여러가지 언어로 표현할 수 있다.
  • RestController는 기존 Controller 와 ResponseBody를 합친 모습과 같다.
  • RestController는 순수한 데이터(리소스)를 반환한다. 기존 Controller는 jsp경로 혹은 model을 반환했다.

앞으로의 계획

  • RESTful 웹 서비스 공부하기
  • SpringBoot + jpa를 활용한 최신 웹 서비스에 대해 배워보기
  • 기존 실습 코드 파악하고 미니 프로젝트 진행하기

TIL

profile
make more services :)

0개의 댓글