2022-12-15-TIL
2022-12-15-TIL
Today I Learned
하드코딩의 의미를 다시 확인하고, Spring Boot에서 Logback을 설정하는 방법과 로그 포맷, 참고할 만한 오픈소스 CMS 프로젝트를 정리했다.
하드코딩이란
테코블 글은 하드코딩을 프로그램 소스 코드에 데이터를 직접 입력해 저장하는 것으로 정의한다. 파일 경로, URL이나 IP 주소, 비밀번호, 화면에 출력할 문자열, 의미를 알 수 없는 매직 넘버가 대표적인 대상이다.
문제는 두 가지다. 값의 의미가 코드에 드러나지 않아 읽기 어렵고, 같은 값이 여러 곳에 흩어져 있으면 바꿀 때 전부 찾아 고쳐야 한다. 의미 있는 이름의 상수로 뽑아내는 것이 1차 해법이고, 환경마다 달라지는 값(접속 주소, 비밀번호)은 아예 코드 밖의 설정 파일이나 환경 변수, 시크릿 저장소로 옮기는 것이 맞다.
- https://tecoble.techcourse.co.kr/post/2020-05-07-avoid-hard-coding/
Logback
Spring Boot는 기본 로깅 구현으로 Logback을 쓴다. 설정 파일로 logback-spring.xml, logback.xml 등을 인식하는데, 공식 문서는 가능하면 -spring이 붙은 파일명을 쓰라고 권한다. 그래야 Spring Boot가 설정을 직접 초기화하면서 <springProfile>로 프로파일별 설정을 나누거나 <springProperty>로 application.yml 값을 가져오는 확장 기능을 쓸 수 있다.
간단한 설정은 XML 없이 application.yml의 logging.level.*, logging.file.*, logging.pattern.* 속성만으로도 가능하다. 파일 롤링, 비동기 Appender, 외부 수집기 연동처럼 세밀한 제어가 필요해지면 logback-spring.xml로 넘어간다.
1
2
3
4
5
6
7
8
<configuration>
<springProfile name="local">
<root level="DEBUG"><appender-ref ref="CONSOLE"/></root>
</springProfile>
<springProfile name="prod">
<root level="INFO"><appender-ref ref="FILE"/></root>
</springProfile>
</configuration>
- https://lankydan.dev/2019/01/09/configuring-logback-with-spring-boot
- https://oingdaddy.tistory.com/317
- https://docs.spring.io/spring-boot/docs/2.1.8.RELEASE/reference/html/howto-logging.html
- https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/boot-features-logging.html
- https://reflectoring.io/springboot-logging/
- https://www.baeldung.com/spring-boot-logging
- https://goddaehee.tistory.com/206
- https://oingdaddy.tistory.com/257
Log Format
Spring Boot 기본 로그 한 줄에는 밀리초 단위 날짜와 시각, 로그 레벨, 프로세스 ID, 실제 메시지 시작을 구분하는 ---, 대괄호 안의 스레드 이름, 로거 이름(보통 축약된 클래스명), 메시지가 순서대로 들어간다. 패턴은 logging.pattern.console, logging.pattern.file로 바꿀 수 있다.
웹 서버 접근 로그에는 NCSA HTTPd에서 유래한 Common Log Format이 오래 쓰였다. 클라이언트 IP, ident, 사용자, 시각, 요청 라인, 상태 코드, 응답 크기로 구성되고, 여기에 referer와 user-agent를 더한 것이 Combined Log Format이다. 로그를 검색 시스템으로 모아 분석한다면 사람이 읽는 텍스트보다 필드가 명확한 JSON 같은 구조화 로그가 다루기 쉽다.
- https://www.graylog.org/post/log-formats-a-complete-guide/
- https://www.crowdstrike.com/cybersecurity-101/observability/log-file-formats/
- https://en.wikipedia.org/wiki/Common_Log_Format
- https://stackoverflow.com/questions/30571319/spring-boot-logging-pattern
CMS Open Source
구조를 참고하려고 찾아본 오픈소스 CMS와 사이트 빌더다. 대부분 Java로 작성되어 있다.
- PublicCMS: Java로 작성된 CMS. 정적 페이지 생성과 SSI를 지원한다고 소개한다.
- lin-cms-spring-boot: Spring Boot 기반의 CMS·관리 시스템 개발 프레임워크.
- diyhi/bbs: Spring Boot 기반 커뮤니티(포럼, Q&A) 시스템.
- Halo: Java로 작성된 오픈소스 웹사이트 구축 도구. 개인 블로그부터 기업 사이트까지 대상으로 한다.
- tianti: Spring Data JPA, Hibernate, Shiro, Spring MVC로 만든 경량 CMS.
- novel: Spring Boot와 Vue로 만든 학습용 소설 서비스 프로젝트.
Hugo: Go로 작성된 정적 사이트 생성기. 서버 측 CMS와 달리 빌드 시점에 HTML을 만든다.
- https://github.com/sanluan/PublicCMS
- https://github.com/TaleLin/lin-cms-spring-boot
- https://github.com/diyhi/bbs
- https://github.com/halo-dev/halo
- https://github.com/xujeff/tianti
- https://github.com/201206030/novel
- https://github.com/gohugoio/hugo
댓글
아직 댓글이 없습니다