전체 글
[JPA] JPA MySQL 몇 가지 이슈에 대해서,,, GenericJDBCException
1. JPA는 맞게 짠 것 같은데 JPA가 안돌아 가는 경우. could not execute statement; nested exception is org.hibernate.exception. org.springframework.orm.jpa.JpaSystemException: could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute 이런 에러가 뜨는 경우 - JPA, 즉 Spring에서 설정한 언어(UTF-8)과 mysql의 언어 셋, charset이 달라서 그렇다. 나는 docker로 mysql을 설치했다. 그런데 여기서 MySQL에서 아래 명령어를 쳐보자..
[JPA] JPA 단방향 vs 양방향
JPA를 이용해서 구성하고 있는데... 다대일 단방향과 양방향에 대한 고찰이다. 일반적으로 다대일을 쓰는 거라고 한다. 그러면 member - team 관계가 있다고 가정하자.. (member:team=n:1 관계) 여러 자료들을 찾아보니 다대일 관계를 가질 때, '다' 쪽에서 외래키를 가지고 다대일 단방향 관계를 구성한다고 배웠ㄷ다. 필요할 때 양방향 관계를 구성한다고 하고. 그런데 이 '필요할 때'를 잘 모르겠다. 정말 양방향 연결이 필요한가? JPA는 '다'쪽에서 '1'쪽에 대한 정보를 가지고 있고, '1'쪽에서 '다'쪽에 대한 정보는 가지고 있지 않다. member-team의 관계에서 member는 어떤 team인지 알 수 있지만, team에 어떤 member가 있는지는 알 수 없기 때문이다. 그..
Kubernetes - 개념
https://subicura.com/2019/05/19/kubernetes-basic-1.html https://subicura.com/k8s/guide/#%E1%84%80%E1%85%A1%E1%84%8B%E1%85%B5%E1%84%83%E1%85%B3 https://bcho.tistory.com/1256?category=731548 위 블로그를 보고, 요약했다. 1. 개념 Kubernetes란? 쿠버네티스Kubernetes - container를 관리해 주는 도구, container orchestration tool이다. 배포 방식도 여러가지가 있고, 클라우드에서 지원하기 때문에 구글의 경우 GKE, AWS의 경우 EKS, Azure의 경우 AKS를 지원하며, autoscaling과 loadbalan..
[Utils] API 설계 백그라운드
RESTful API 설계 가이드 https://sanghaklee.tistory.com/57 자주 사용하는 http status code https://gist.github.com/subicura/8329759 200번대 200 OK request 성공 ex) resource 목록/resource 상세/resource 수정/그외 대부분의 API 성공 성공 메시지가 날아오는 경우는 200이라고 생각해도 무방 201 Created request 성공 ex) resource 생성 성공 204 No Content request 성공 ex) resource 삭제 성공 300번대 301 move permanently 페이지 이동 307 temporary_redirect 임시 페이지 이동 400번대 400 Bad ..
[Git] 현업에서 사용하는 git
git master branch는 실 사용 서버와 주로 연동되며 git-jenkins hooker도 master를 주로 받아옴. 그래서 master에 바로 소스코드를 push해버리면 테스트나 품질 검사 이런 게 없이 바로 build가 되어 버림. 그래서 다른 branch, develop branch를 파서 개발이 어느 정도 되면 master branch에 merge request를 하고, 관리자가 확인 한 후에 merge하는 것이 더 좋을 것임.
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 4. docker image push
지난 포스팅에서 gitlab에 push하면 hook을 따와서 jenkins에서 gitlab의 소스코드를 받아와서 build하는 것을 했다. 그러면 다음으로는 docker image를 만드는 것이다. 지금 EC2 위에는 docker가 있고, docker 내부에 jenkins를 올려두었고, jenkins에서 docker image를 작성하려면 1) jenkins 내에 docker를 깔던가, 2) jenkins에서 docker로 접속할 수 있는 방법을 만들던가 2가지 방법이 있다. 나는 2)를 택하고자 한다.(jenkins bash에서 docker로 접속할 수 있게) https://skyblue300a.tistory.com/14 1. Jenkins에서 docker로 접속하기 $ docker ps CONTAIN..
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 3. gitlab project hooker 연동
1. gitlab project hooker로 git에 push하면 jenkins에서 받아오기 일단 new item - freestyle project 생성 소스 코드 관리는 Git으로 바꿔준다. 내 개인 repository url을 적고, 바로 위에서 작성했던 credential을 바꿔준다. 젱질 아래의 branches to build는 어떤 branch가 push되었을 때 build할 것인지에 대한 선택이다. 빌드 유발에서 gitlab webhook 뒤에 있는 url을 복사하자. 그리고 밑으로 내려보면 secret token이 있는데, generate한 후에 이 것도 복사해 두자. gitlab - settings - webhook으로 들어가서, 바로 위 사진의 url과 secret token을 복사한..
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 2. Docker, Jenkins, gitlab 연동
https://tape22.tistory.com/16?category=928488 위 포스팅을 많이 참고했다. 1. EC2에 Docker, docker-compose 지난 포스팅에서 VS Code로 linux EC2에 접근했다. Ctrl + `를 눌러서 docker를 EC2에 설치하자. $ sudo yum install docker $ sudo dockerd 이후에 docker ps를 치면 에러가 난다. $ docker ps Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/contain..
EC2 Docker Jenkins Spring Gitlab 자동 빌드 - 1. EC2 instance 생성 및 VS Code SSH 접속
이제 해보고자 하는 것은 EC2 위에 Docker를 올리고, 그 Docker에 Jenkins container를 올려 local에서 작성한 spring 코드가 gitlab에 push되었을 때 build 및 pipeline을 거치면서 JUnit test, SonarQube 등 정적 검사를 거치고 docker image로 build하는 것을 목표로 한다. 1. EC2 instance 생성 먼저 EC2에 들어가서 인스턴스 시작 클릭 프리티어 이용 가능한 것을 선택 마찬가지로 프리티어 이용 가능한 것을 선택 다음으로 검토 버튼을 눌러서 검토를 본다. 보면 메노리가 1GiB로 상당히 적어, 추후에 swapfile 세팅을 해 주어야 한다. (OS에서 배우는 것, 스토리지를 ram처럼 사용할 수 있게 해 줌. 그리고..
MSA란? Docker와 Kubernetes, Container와 VM, Jenkins란?
http://book.interpark.com/product/BookDisplay.do?_method=detail&sc.shopNo=0000400000&sc.prdNo=293915007&sc.saNo=003002001&bid1=search&bid2=product&bid3=title&bid4=001 위 책을 읽고 느낀점을 정리함. 1. MSA가 뭘까? 더 빠른 개발을 위해서는 수정사항이 빨리빨리 반영되어야 한다. 그런데 기존의 monolithic한 개발 방식으로는 배포하는 데도 시간이 걸리고, 빌드하는 데도, 심지어 한 어플리케이션들의 열려있는 message들과 그 형식을 모두 맞춰야 하기 때문에 agile하지 못하다. 그래서 MS와 MSA가 나타나게 되었다. MicroService란 큰 App을 작은 s..
[Spring] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 정리, 인프런 김영한 스프링
스프링 토이프로젝트를 하나 만들긴 했지만 내가 한 것은 기술을 어떻게 사용하느냐지, 어떻게 만들어졌는가는 생각하지 않았다. 모든 분야가 그렇듯 동작 원리에 대해 이해해야 더 좋은 코드를 작성할 수 있기 때문에 스프링 그 자체에 대해 공부를 조금 해 볼 예정이다. 인프런의 김영한님의 강의를 몇 개 들을 예정이다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard 이 글은 위 링크에 있는 강의를 정리한 글이다. 이후에 유료강의들은 비공개로 정리할 예정이고. 1. 프로젝트 환경설정 1) 프로젝트 생성 나는 VS Code ..
[Lombok] Lombok의 Getter, Setter with VS Code
@Getter @Setter annotation attribute에 붙이면 해당 attribute에 getter, setter method가 생기고 class에 붙이면 class의 모든 attribute에 생김. 변수 이름이 asdf면 getAsdf() setAsdf() 이 함수들이 생성이 됨. VS Code에서 작동하지 않는 경우 1) extension에서 Lombok Annotations Support for VS Code 설치 2) build.gradle dependency에 아래 코드 추가 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
[Docker] Docker 데몬 run error 해결
cannot connect to docker daemon at unix ///var/run/docker.sock 에러 -> sudo dockerd 접근 권한 에러 -> sudo chmod 777 /var/run/docker.sock
[Docker] Docker - push / pull
https://youngmind.tistory.com/entry/Docker-%EA%B0%95%EC%A2%8C-4-%EB%8F%84%EC%BB%A4-%EC%9D%B4%EB%AF%B8%EC%A7%801 Docker 강좌 - 4. 도커 이미지1 - 도커이미지 만들기 Docker Images docker registry에서 필요한 docker image를 검색할 수 있다. [root@cent154 ~]# docker search centos NAME DESCRIPTION .. youngmind.tistory.com 1. docker push docker login을 치고, id/pw를 입력해 로그인한다. docker images를 치고 뭐가 있는지 봐본다. > docker images; REPOSITORY T..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 5. 자잘한 수정사항
1. local에서 F5나 build해서 실행하면 잘 되었는데, docker 환경/서버에 올리니까 안됨! 아래 게시글을 참고했다. return "~.html"을 할 때 습관적으로 제일 앞에 /를 붙여 절대경로로 만들어서 문제가 생겼던 것 같다. 빼니까 잘 된다. https://devkingdom.tistory.com/149
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 4. EC2 배포
1. EC2에 인스턴스 생성 IAM 계정으로 시작하는 것을 추천한다고 한다. (IAM 계정은 해킹당하더라도 다른 container에 권한이 부족하기 때문에 접속 불가) 1) instance 시작 2) AMI 선택 3) instance type 선택 4) instance detail 선택 5) storage 추가 6) 태그 추가 7) 보안 그룹 설정 서버 접속을 위한 SSH 접근은 포트 22번, 웹 서버 활용을 위한 포트는 443으로 적용되었다. 8) 키 페어 선택 ssh 접속을 위해 필요한 파일이라 한다. 이것이 있어야 인스턴스에 접속할 수 있다는 것 같다. 9) instance 확인 뭔가 돌아가고 있다. 상태 검사가 검사 통과 상태면 인스턴스 실행 중이라는 것이다. 2. EC2에 인스턴스에 접속 1) ..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 3. 검색기능Search
1. 검색기능 - SELECT resources/templates/list.html의 검색하기 버튼을 누르면 /board/search로 GET method가 요청된다. 요청이 가면 controller에서는 boardService.searchPost(keyword) method를 이용해 해당하는 DTO만 SELECT하게 하고, 받아온 DTO list를 model에 addAttribute한 후 return하자. 1) Controller /src/main/java/com/example/testcompose/controller/BoardController.java package com.example.testcompose.controller; import com.example.testcompose.dto.Boar..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 2. 게시글 CRUD
1. 게시글 작성, Create 앞 게시글에서 spring의 구조에 대해 다루었다. Controller, Service, Repository, DTO, Entity를 복습하자면 아래와 같다. 해당 프로젝트에서 service는 JPA interface인 repository를 불러올 것이다. - controller controller는 client의 요청을 받아서 처리해준다. controller는 service를 호출해서 요청을 처리한다. - service service는 business logic을 수행한다. - Repository spring data JPA는 repository라는 interface를 제공한다. JPA를 추상화 한 것으로, interface에 맞는 규칙대로 입력하면 spring이 알아서..
[Docker + Spring] Docker gradle Spring Boot with VS Code JPA MySQL 게시판 생성 - 1. 전체 구조 잡기
https://victorydntmd.tistory.com/325 https://velog.io/@max9106/Spring-Boot-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8-%EC%83%9D%EC%84%B1 위 두 글을 바탕으로 구성하고, 진행했다. 1. 수정사항, 의존성 설정, 전체적 구조 잡기 개발환경 IDEA : VS Code Java : openjdk 11 Gradle : 7.0.2 Spring Boot : 2.5.2 Docker : 20.10.7 라이브러리 MySQL : DB JPA : DB와 연동을 위해 필요함 Thymeleaf : resource/templates에 있는 html 파일을 읽어오기 위해 필요함 Lombok : NoArgsConstructor라는 Con..
[Docker] Docker로 백엔드(Spring Mysql) 구성하기
1. volume을 이용해 Docker가 local file 참조하게 해서, 코드 변경 반영하게 하기. https://github.community/t/docker-not-working/181304 https://devlog-wjdrbs96.tistory.com/311?category=902375 위 두 글을 참고했다. 먼저, 어제 작성한 dockerfile을 바꾼다. FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"] FROM openjdk:11-jre-slim WORKDIR /root ADD ./build/libs/demo-0.0.1-SNAPSHOT..