Skip to content

fp024/learning-spring-web-project-by-code

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

363 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

learning-spring-web-project-by-code

코드로 배우는 스프링 웹 프로젝트 스터디 (저자: 구멍가게코딩단)

스터디 진행 목차

라이브러리 버전 관리 목적의 Maven Parent 프로젝트

디펜던시하고 있는 라이브러리들의 버전 관리를 하나의 POM에서 하기 위해서, 부모 POM으로 분리해두었음.

Scouter 적용 (성능 모니터링)

스터디 프로젝트의 성능 모니터링을 할 수 있도록 Scouter를 연동해보았다. 관련 라이브러리만 잘 배치했다면 프로젝트 루트의 배치파일 만 실행하면 바로 연동해서 실행해볼 수 있게 했다.

의견

  • Oracle JDK는 개인 용도 사용이 아닌 경우라면 라이선스 문제가 있을 수 있어, OpenJDK 설치로 소개해주시면 좋을 것 같습니다.

  • Part1에서 lombok의 @Setter를 통해 @Autowired를 붙이는 것을 가이드 해주셨는데, 클래스의 멤버 변수에 직접 @Autowired를 붙일 수 있으므로 반드시 필요한 부분이 아닐 것 같습니다. JDK버전에 따라 코드를 변경해야할 수도 있으므로 필드에 붙이는게 나아보입니다.

  • 보통 JUnit 테스트 클래스명은 Test로 끝나는 것이 일반적으로 보였는데, Tests로 하셔서 뭔가 특이하긴했습니다.

  • p92. RootConfig 클래스의 일부에서 sqlSessionFactory.getObject() 반환 부분

    • getObject() 메서드가 SqlSessionFactory를 반환하기 때문에 명시적 형변환이 필요없습니다.
  • @Slf4j를 사용하면 로그 구현체를 바꾸더라도 코드 수정이 없어서, @Log4j 보다 나을 것 같긴한데, 연습할 때는 @Slf4j 규칙에 맞게 로깅 부분을 수정했습니다.

  • Eclipse 나 STS 사용시 MyBatipse 플러그인이 Mapper XML 파일 생성 및 작성시 도움이 되었습니다.

  • Part1 - log4jdbc-log4j2 설정관련.. 적용을 하려다, 아래 사유로 적용을 하지 않았습니다.

    • JDK 11, ojdbc8 실행환경

    • 2013년 이후로 라이브러리 업데이트가 되지 않고 있음.

    • 데이터 소스 생성시 드라이버 클래스로 로깅 라이브러리의 Spy클래스를 쓰는 것에 거부감이 듬.

      • MyBatis에서 처리해주는 로깅 방식 사용
        test 리소스의 log4j.xml 에다 mapper에 대한 TRACE 로거를 설정하였습니다.

        <Logger name="org.fp024.mapper" level="trace"/>
      • 결과

        INFO : org.fp024.persistence.TimeMapperTest - getTime2
        DEBUG: org.fp024.mapper.TimeMapper.getTime2 - ==>  Preparing: SELECT sysdate FROM dual
        DEBUG: org.fp024.mapper.TimeMapper.getTime2 - ==> Parameters: 
        TRACE: org.fp024.mapper.TimeMapper.getTime2 - <==    Columns: SYSDATE
        TRACE: org.fp024.mapper.TimeMapper.getTime2 - <==        Row: 2021-03-19 01:02:47
        DEBUG: org.fp024.mapper.TimeMapper.getTime2 - <==      Total: 1
        INFO : org.fp024.persistence.TimeMapperTest - 2021-03-19 01:02:47
        
      MyBatis 3.2 부터 이렇게 할 수 있다고 합니다.
      
      
    • Log4j 1이 End of Life 상태이고 보안취약점이 있어, 개정판에는 Log4j 2로 변경되야할 것 같습니다.

서버 실행 / 정지/ 로그 보기 스크립트

가상 머신에 띄어두기위해서 서버 실행/정지 스크립트를 만들고 크론탭으로 서버 시작시 실행되게 하였다.

  • 서버 시작 스크립트

  • 서버 정지 스크립트

    • jetty-stop-server.sh : Jetty 서버 종료

    • tomcat-stop-server.sh : Tomcat 서버 종료

      • cargo:run으로 실행하는 Tomcat 서버의 경우 백그라운드로 실행할 경우 Tomcat 서버는 종료할 수 있지만 그것을 감싼 MavenWrapper프로세스는 고아 프로세스로 남을 수 있다. 왠만하면 백그라운드로 실행하지 말자!
  • 로그 보기 스크립트

    • show-log.sh: 실행 로그 보기 (최초 시작후 로그만 남김, log rotate등은 적용하지 않음, 재부팅 때마다 새로 갱신)
  • crontab -e 설정 (백그라운드 실행에 )

    # Scouter Host Agent 시작
    @reboot /home/fp024/apps/scouter/latest/agent.host/host.sh
    
    # 게시판 프로젝트 시작
    @reboot /home/fp024/git-fp024/learning-spring-web-project-by-code/jetty-start-with-scouter.sh

Linux 환경 스크립트에서 사용하는 환경변수 설정 파일

스크립트에서 사용하는 환경 설정 파일 정의

  • setenv.properties

    JAVA_HOME=/home/fp024/JDK/17
    SCOUTER_JAVA_AGENT_CONF=scouter/conf/board-webapp.conf
    SCOUTER_JAVA_AGENT_LIB=/home/fp024/apps/scouter/latest/agent.java/scouter.agent.jar
    
    # 최종 진행한 프로젝트
    LATEST_PROJECT_HOME=part07/jex06-board

Visual Studio Code 에서 Java Project 인식 시간이 너무 느릴 때... 😥

  • Ctrl + <Shift> + P 로 모든 명령 연 다음..
  • java clean 이라고 입력하면...
  • Java: Clean Java Language Server Workspace 명령이 뜨는데 이것을 실행해주자! 😄

모델/매퍼 재생성

MyBatis Generator Plugin 또는 mybatis-dynamic-sql 버전이 변경된 경우,
💡 생성 코드와 현재 라이브러리 버전의 호환성을 맞추기 위해 모델과 매퍼를 한 번 재생성하는 것을 권장한다.

mvn mybatis-generator:generate

그리고 자동생성되는 VO나 Mapper에다가 기능 추가는 자제하자!

⚠️자동 생성 코드 관리

VOMapper는 MyBatis Generator로 자동 생성되므로,
가능하면 직접 수정하지 말고 생성된 구조를 그대로 유지하는게 낫다.

추가 기능이나 비즈니스 로직은 service 계층 또는 별도 클래스로 분리하는 것이 좋을 것 같다.

정오표

  • 각 진행 문서에 작성

About

코드로 배우는 스프링 웹 프로젝트 스터디

Topics

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages