-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat#30/Dockerfile 수정 및 prod 환경 설정 #34
Conversation
- rds 연결 yml 작성 - secret 작성 (따로 배포 예정) - gitignore에서 secret 파일 제외
- Docker Compose 실행 시 원자적으로 DB와 어플리케이션을 띄우기 위해 도커 파일 수정 - Docker Compose DB username Spring Profiles 사용 - application.yml 기본 프로필 local로 수정
- PR 체크 사항 삭제 - 작업 설명란 추가
- github action build 되도록 변경
- [ ] 이해하기 어려운 비즈니스 로직에 관해서 부연 설명을 하고 있나요? | ||
- [ ] 팀원 한 명을 Assign 했나요? | ||
- [ ] 작업 범위에 대해서 테스트를 작성하셨나요? | ||
## 📄 작업 설명 | ||
|
||
## 🚨 관련 이슈 | ||
closes #[이슈번호] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
코드 가독성 및 유지보수성
- 주석을 추가하여 복잡한 비즈니스 로직이나 중요 변경 사항을 설명하세요.
- 함수나 변수 이름을 명확하게 지어 코드의 목적을 쉽게 이해할 수 있도록 하세요.
-
성능 최적화
- 반복되는 연산이나 데이터베이스 호출을 최소화하십시오. 캐싱 전략을 고려해 보세요.
- 불필요한 객체 생성을 줄이고 스트림 API를 활용하여 컬렉션을 처리하는 방법도 검토하세요.
-
보안 및 데이터 검증
- 사용자 입력에 대한 철저한 검증을 수행하고 SQL 인젝션, XSS 공격 등을 방어하는 방법을 적용하세요.
- 민감한 데이터는 적절히 암호화하고, 접근 제어를 강화하여 보안을 높이세요.
이러한 개선 사항들을 통해 코드를 더 읽기 쉽고, 성능이 뛰어나며, 안전하게 만들 수 있습니다.
**/application-secret.yml | ||
|
||
# End of https://www.toptal.com/developers/gitignore/api/intellij,macos,java,git,gradle,windows,linux |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 변경 내용을 검토한 결과, 다음과 같은 개선점을 제안합니다.
-
코드 가독성 및 유지보수성
- 주석을 추가하여 왜
application-secret.yml
파일을 무시하는지 명확히 설명하세요. 이 정보는 다른 개발자에게 유용할 수 있습니다. - 코드의 논리적 구조가 잘 문서화되어 있는지 확인하고, 지나치게 긴 주석이나 불필요한 주석은 제거하세요.
- 주석을 추가하여 왜
-
성능 최적화
- 지금 단계에서 성능과 관련된 직접적인 변화는 없지만, 나중에 설정 파일을 무시하는 부분이 서로 충돌하지 않도록 관리하세요.
-
보안 및 데이터 유효성 검사
application-secret.yml
파일을 무시하는 것은 보안에 긍정적 영향을 미칩니다. 하지만, 이 파일에 저장된 정보가 안전하게 관리되도록 다른 보안 관행(예: 환경 변수 사용)을 고려해야 합니다.- 설정 파일 내 비밀번호나 API 키 등 민감한 데이터를 암호화하여 저장하는 방법도 고려하세요.
다음 커밋에서는 이러한 사항들을 반영하여 코드와 보안을 지속적으로 개선하도록 하세요.
|
||
# 컨테이너 실행 시 실행할 명령어 | ||
# Command to run the application | ||
ENTRYPOINT ["java", "-jar", "app.jar"] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 차이를 검토한 결과, 다음과 같은 개선 사항을 제안합니다:
1. 코드 가독성 및 유지 보수성
- 주석 추가: 주요 단계별로 주석을 달아 각 단계의 목적을 명확히 하면 좋습니다.
- 일관된 네이밍:
app.jar
와 같은 파일 이름은 명확하게 정의해두면 좋습니다. 예를 들어, 프로젝트 이름을 포함하는 것이 더 명확할 수 있습니다.
2. 성능 최적화
- 멀티스테이지 빌드 활용: 현재 구조는 잘 되어 있지만, 추가적인 캐싱을 고려하여 Gradle 캐시를 활용할 수 있습니다. 예를 들어, 의존성만 먼저 복사하여 빌드 속도를 높일 수 있습니다.
3. 보안 및 데이터 검증
- JAR 파일 유효성 검사: 컨테이너의 시작 시 JAR 파일이 존재하고 유효한지 확인하는 스크립트를 추가하여 문제가 발생할 경우 초기에 오류를 포착하도록 합니다.
- 최소 권한 원칙: Java 애플리케이션이 실행 중에 불필요한 관리자 권한을 요구하지 않도록 권한 관리를 더욱 철저히 할 필요가 있습니다.
이러한 개선을 통해 코드는 더욱 읽기 쉽고 유지 관리하기 좋은 모습이 될 것입니다. 또한, 성능과 보안 측면에서도 강화될 수 있습니다.
@@ -21,7 +21,7 @@ services: | |||
mysql: | |||
image: mysql:8.0.35 | |||
environment: | |||
MYSQL_ROOT_USER: root | |||
MYSQL_ROOT_USER: ${MYSQL_ROOT_USER} | |||
MYSQL_ALLOW_EMPTY_PASSWORD: yes | |||
MYSQL_DATABASE: twodari | |||
TZ: Asia/Seoul |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코드 변경 사항에 대한 리뷰는 다음과 같습니다.
-
코드 가독성 및 유지 관리성
- 환경 변수를 사용하여
MYSQL_ROOT_USER
의 값을 외부에서 설정하도록 변경한 것은 좋은 접근입니다. 하드코딩된 값 대신 환경 변수를 사용하면 코드가 더 유연해집니다. - 문서화: 이러한 환경 변수의 목적과 사용법에 대한 주석을 추가하면 유지 관리성이 높아집니다.
- 환경 변수를 사용하여
-
성능 최적화
- 특별히 성능 최적화와 관련된 변경은 보이지 않습니다. 데이터베이스 성능 문제를 방지하려면 적절한 인덱스를 고려하고, 쿼리 최적화를 지속적으로 모니터링해야 합니다.
-
보안 및 데이터 검증
MYSQL_ALLOW_EMPTY_PASSWORD: yes
는 보안상 위험할 수 있습니다. 궁극적으로 비밀번호를 요구하는 것이 좋으며, 이를 통해 불필요한 공격을 예방할 수 있습니다.- 환경 변수를 통한 사용자 입력을 사용할 때는 반드시 값이 예상 범위 내에 있는지 검증하는 로직이 필요합니다.
주요 개선 사항
MYSQL_ALLOW_EMPTY_PASSWORD
를 비활성화하고, 강력한 비밀번호 정책을 도입하세요.- 환경 변수 사용 시 주석을 추가하여 가독성을 높이세요.
- DB 쿼리와 연결을 정기적으로 검토하여 성능 최적화를 도모하세요.
level: | ||
org.hibernate.SQL: debug | ||
org.hibernate.type: trace | ||
--- | ||
spring: | ||
config: | ||
activate: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
코드 가독성 및 유지관리:
spring
설정이 서로 다른 프로파일에 따라 나뉘어 있으므로, 각 프로파일의 설정을 명확하게 주석으로 설명하는 것이 좋습니다.- 매개변수 이름을 일관되게 사용하여 이해하기 쉽게 만들고, 필요한 경우 별도의 설정 파일로 분리하세요.
-
성능 최적화:
ddl-auto: create
는 개발 환경에서는 유용하지만, 프로덕션에서는 데이터 손실을 초래할 수 있습니다.update
또는none
으로 변경하는 것을 고려하세요.show-sql: true
와 디버그 로그 레벨은 성능 저하를 일으킬 수 있으므로, 프로덕션 환경에서는 비활성화해야 합니다.
-
보안 및 데이터 검증:
secret-datasource
관련 정보가 외부 파일에서 로드되는 만큼, 해당 정보를 안전하게 관리하고, 가능하다면 환경 변수에서 직접 로딩하는 방식을 고려하세요.- 데이터베이스 접속 정보를 코드에 하드코딩하지 않고, 암호화된 상태로 관리하는 것이 좋습니다.
- SQL 인젝션 방지를 위해 ORM(예: Hibernate)과 같은 안전한 데이터 접근 방법을 최대한 활용하세요.
이러한 개선 사항을 통해 코드를 더 견고하고 효율적으로 만들 수 있습니다.
Code Coverage Report
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 😆
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM👍
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
너무 좋다!
📄 작업 설명
Docker Compose로 띄웠을 때 앱 빌드까지 원자적으로 실행되도록 스크립트를 바꿨어요 !
그리고 Dockercompose.yml에 spring profile을 사용했고, application.yml에는 prod 환경을 설정했어요 !
나중에 api-key는 따로 드릴께요~
🚨 관련 이슈
closes #30
🌈 작업 상황
📌 기타