Skip to content

Latest commit

 

History

413 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

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에다가 기능 추가는 자제하자!

⚠️자동 생성 코드 관리

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

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

정오표

  • 각 진행 문서에 작성

About

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

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages