-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from HwiYul-G/07-CICD
CICD 이번엔..?
- Loading branch information
Showing
62 changed files
with
2,449 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
name: Build and deploy a container to an Azure Web App | ||
|
||
env: | ||
AZURE_WEBAPP_NAME: java-board-webapp | ||
|
||
on: | ||
push: | ||
branches: | ||
- main | ||
|
||
permissions: | ||
contents: 'read' | ||
packages: 'write' | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Check out the repository | ||
uses: actions/checkout@v4 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v4 | ||
with: | ||
java-version: '17' | ||
distribution: 'temurin' | ||
cache: 'maven' | ||
- name: Build with Maven | ||
run: mvn --batch-mode --update-snapshots package -DskipTests | ||
- name: Set up Docker Buildx | ||
uses: docker/setup-buildx-action@v3 | ||
- name: Log in to GitHub container registry | ||
uses: docker/login-action@v3 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.actor }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: java-board-webapp | ||
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV} | ||
- name: Build and push container image to registry | ||
uses: docker/build-push-action@v5 | ||
with: | ||
context: . | ||
push: true | ||
tags: ghcr.io/${{ env.REPO }}:${{ github.sha }} | ||
file: ./Dockerfile | ||
|
||
deploy: | ||
runs-on: ubuntu-latest | ||
needs: build | ||
steps: | ||
- name: java_board | ||
run: echo "REPO=${GITHUB_REPOSITORY,,}" >>${GITHUB_ENV} | ||
- name: Deploy to Azure Web App | ||
id: deploy-to-webapp | ||
uses: azure/webapps-deploy@v3 | ||
with: | ||
app-name: ${{ env.AZURE_WEBAPP_NAME }} | ||
publish-profile: ${{ secrets.AZURE_WEBAPP_PUBLISH_PROFILE }} | ||
images: 'ghcr.io/${{ env.REPO }}:${{ github.sha }}' | ||
- name: Prevent push to main branch on deployment failure | ||
if: ${{ failure() }} | ||
run: | | ||
git checkout main | ||
git revert HEAD --no-edit | ||
git push origin main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,22 @@ | ||
name: Java CI with Maven | ||
|
||
on: | ||
pull_request: | ||
branches: ["main"] | ||
|
||
jobs: | ||
build: | ||
|
||
runs-on: ubuntu-latest | ||
|
||
steps: | ||
- name: Check out the repository | ||
uses: actions/checkout@v4 | ||
- name: Set up JDK 17 | ||
uses: actions/setup-java@v3 | ||
with: | ||
java-version: '17' | ||
distribution: 'temurin' | ||
cache: maven | ||
- name: Build and test with Maven | ||
run: mvn --batch-mode package |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,13 @@ | ||
FROM eclipse-temurin:17-jre as builder | ||
WORKDIR application | ||
ARG JAR_FILE=target/*.jar | ||
COPY ${JAR_FILE} application.jar | ||
RUN java -Djarmode=layertools -jar application.jar extract | ||
|
||
FROM eclipse-temurin:17-jre | ||
WORKDIR application | ||
COPY --from=builder application/dependencies/ ./ | ||
COPY --from=builder application/spring-boot-loader/ ./ | ||
COPY --from=builder application/snapshot-dependencies/ ./ | ||
COPY --from=builder application/application/ ./ | ||
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,69 @@ | ||
## 사용 라이브러리 | ||
- data-jpa : spring-data-jpa로 손쉽게 datsource에 접근 하기 위함 | ||
- thymeleaf : | ||
- bootstrap | ||
- devtools : 재시작 없이 하려고 | ||
- mysql : 데이터베이스 | ||
- lombok : @Getter, @Setter 등 간편하게 하려고 | ||
- mockito-core : unit test를 위해 mock 객체 생성용 | ||
## 기능 구현 목록 | ||
### Article | ||
- [x] id, title, content, createdAt, updatedAt, writer | ||
- [x] comments | ||
- [x] 작성하기(Create) | ||
- [x] writer의 값으로 User의 nickname을 넣는다. | ||
- [x] 개별 조회하기(retrieve) | ||
- [x] 목록 조회하기 | ||
- [x] 페이징 적용 | ||
- [x] 수정하기(update) | ||
- [x] 작성한 User만 수정이 가능하게 한다. | ||
- [x] 이를 위해선 사용자 nickname(writer)가 중복이 안 되게 해야한다. | ||
- [x] 이를 위해 nicknme 기반으로 email 찾기 기능 추가 | ||
- [x] 삭제하기(delete) | ||
- [x] 작성한 User만 삭제가 가능하게 한다. | ||
- [x] 관련된 comment를 먼저 지우고 현재 게시글이 지워지게 한다. | ||
- [x] comments 가져오기 | ||
### Comment | ||
- [x] id, content, createdAt, updatedAt, article(owner) | ||
- [x] 작성하기(create) | ||
- [x] writer의 값으로 User의 nickname을 넣는다. | ||
- [x] 삭제하기(delete) | ||
- [x] 작성한 사용자만 수정가능하게 한다. | ||
- 이를 위해 `customAuthenticationSuccessHandler`와 `CustomLogoutSuccessHandler`를 만들고 `SecurityConfig`의 필터체인에 등록해준다. | ||
- 사용 하고 자 하는 부분인 ArticleController에 `@SessionAttributes(key)`로 등록한 세션을 접근가능하게 만든다. | ||
- 필요한 get 함수에서 Model을 통해 view로 보내준다. | ||
- view에서 작성한 사용자의 nickname 기반으로 게시글의 writer와 현재 로그인한 사용자의 nickname이 일치하지 않으면 삭제, 수정 버튼이 보이지 않게 한다. | ||
- [x] 수정하기(update) | ||
- [x] 삭제하기와 마찬가지로 작성한 사용자만 수정가능 하게 한다. | ||
### User | ||
- [x] id, nickname, email, password, name | ||
- [x] 등록하기(register) | ||
- [] 수정하기(update) | ||
- [x] password수정 | ||
- 데이터베이스에 저장된 그 비밀번호와 비교할 수 있어야 한다. | ||
- 올바른 비밀번호를 입력해도 비교가 제대로 안 되는 문제가 있었다. | ||
- 이는 비밀번호를 encode해서 입력될 때 같은 값이여도 다르게 되는 문제 때문이다. (random salt사용) | ||
- 정확히 authentication context의 것을 가져와서 수행한다. | ||
- [] email 수정 | ||
- 세션에 등록된 email도 변경 되게 해야 한다. | ||
- [x] 이미지 수정 | ||
- [x] nickname 수정 | ||
- 닉네임 수정시 현재 사용자가 만든 article과 작성한 comment에 대한 닉네임을 모두 변경 | ||
- 세션에 등록된 닉네임도 변경 | ||
- [x] 탈퇴하기(delete) | ||
- [x] 사용자의 저장된 프로필 이미지를 삭제한다. | ||
- [x] 사용자의 댓글을 전부 삭제 한다. | ||
- [x] 사용자가 작성했던 게시글을 전부 삭제한다. | ||
- [x] 내가 쓴 게시글 목록 보기 | ||
- [x] 페이징 처리 | ||
- [x] 게시글의 다른 페이지를 클랙해도 기존 댓글 페이지는 유지하기 | ||
- [x] 게시글 삭제 후, 개인정보 페이지에 있게 하기 | ||
- [x] 게시글 보기에서 뒤로가기 버튼 클릭시, 개인정보 페이지에 있게 하기 | ||
- [x] 사용자 정보에서 게시글 보기를 들어가서 아래 행위 후, 뒤로가기 버튼을 누르면 개인정보가 아니라 게시판 있던 부분으로 가지는 문제 | ||
- [x] 새 댓글 작성 | ||
- [x] 댓글 수정 | ||
- [x] 댓글 삭제 | ||
- [x] 게시글 수정 | ||
- [x] 게시글 삭제 | ||
- [x] 내가 쓴 댓글 보기, paging 처리 | ||
- [x] 댓글의 다른 페이지를 클릭해도 기존 게시글 페이지는 유지하기 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,23 @@ | ||
## ConcurrentMap | ||
<p> | ||
Hashtable은 오퍼레이션을 동기화해서 스레드 안전성을 제공한다.<br> | ||
HashMap은 스레드 안전한 구현이 아니다.<br> | ||
Hashtable이 스레드 안전하지만 효율적이지 않다. 완전 동기화된 Map인 Collections.synchronizedMap도 훌륭한 효율성을 보여주지 않는다.<br> | ||
높은 동시성 상황에서 높은 처리량으로 스레드 안전하길 바라면, HashMap과 synchronizedMap은 좋지 못하다.<br> | ||
</p> | ||
<p> | ||
높은 동시성 상황에서 높은 처리량을 해결하며 스레드가 안전하게 하기 위해 Java 1.5.에서 `ConcurrentMap`이 도입되었다. | ||
</p> | ||
|
||
- concurrency problem(동시성 문제) : 제한 없이 같은 데이터베이스에 여러 연산들이 실행될 때 발생하는 문제. | ||
- thread-safety : data races를 피할 수 있다. | ||
- data races : 여러 스레드들이 데이터에 접근하고 수정하는 순서에 따라, 올바르거나 올바르지 않은 값이 데이터에 할당되는 상황 | ||
|
||
### ConcurrentMap | ||
`ConcurrentMap`은 `Map` 인터페이스의 확장이다. `ConcurrentMap`은 스레드 안전한 처리량을 조절하는 문제를 해결하기 위해 제공된 구조와 지침이다. | ||
몇가지 인터페이스 기본 메소드들을 재정의하며, `ConcurrentMap`은 스레드 안전하고 메모리 일관된 원자성 작업을 제공하기 위한 타당한 구현들을 위한 지침을 준다. | ||
|
||
|
||
|
||
## 참고자료 | ||
- https://www.baeldung.com/java-concurrent-map |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.