본문 바로가기

전체 글88

MySQL SpringBoot docker-compose the driver has not received any packets from the server. 자주 보던 에러 메시지인데 오늘도 기억이 안나서 시간을 너무 많이 써버렸다. MySQL8.0이상부터는 jdbc:mysql://mysql:3306?allowPublicKeyRetrieval=true allowPublicKeyRetrieval=true 옵션을 써줘야 한다 MITM(Man In The Middle) 공격을 막기 위함이란다. 추가적으로 MySQL 에 depends_on 옵션을 달고 Spring boot에 의존성을 걸어줬는데 몇 번의 커넥션 실패 후에야 성공하는 문제가 있었다. 그건 해당 링크를 보고 해결했다. https://stackoverflow.com/questions/42567475/doc.. 2023. 8. 9.
1. 생성자 대신 정적 팩터리 메서드를 고려하라 박싱 클래스: primitive 자료형을 wrapper 클래스의 객체로 만드는 과정을 의미, 언박싱은 그 반대를 의미한다. 박싱 클래스의 Boolean에는 primitive한 값을 wrapper 클래스로 바꿔주는 valueOf라는 정적 팩터리 메서드가 존재한다. public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 장점 1. 생성자가 이름을 가질 수 있다. 위의 정적 팩토리 메서드처럼 클라이언트는 생성자 말고도 정적 팩터리 메서드를 제공해 클래스를 생성할 수 있다. public class Order { private boolean prime; private boolean urgent; private Pro.. 2023. 2. 19.
kubernetes - intro 지금까지 EC2에 도커를 직접 설치해 배포하는 단계 - ECS에 배포하는 단계 들이 있었다. 수동 배포의 문제 1. 자체적으로 모든 리소스들을 관리하고 구성해야 한다. 2. 해당 인스턴스의 운영체제와 어플리케이션에 대한 모든 관리를 해줘야 한다. 3. 컨테이너가 충돌하거나 다운될 수 있으며 새 컨테이너로 교체해야 한다. 이 과정에서의 문제점은 항상 모니터링 하고 있어야 한다. 4. 트래픽의 증가가 생기면 여러 동일한 컨테이너를 직접 실행해줘야 한다. 5. 어플리케이션의 업데이트를 직접 관리해줘야 한다. ECS의 장점 ECS는 위의 문제들을 대부분 해결해줬다. 1. 컨테이너의 헬스체크를 통해 문제가 생기면 컨테이너를 재시작 해준다. 2. 오토스케일링을 통해 가옫 및 실행중인 컨테이너 인스턴스 수를 조절해준.. 2023. 1. 28.
Linux 기본 명령어 도커를 만듦에 있어서 리눅스 기본 명령어에 대한 공부가 선행되어야 겠다는 생각이 들었다. 유투브 뉴렉처 채널 리눅스 강의를 봤다. 아는건 정리 안하고 모르는 것만 할거다. 1. Shell OS와 사용자가 커뮤니케이션 하기 위해서는 대화 창구가 필요하다. OS를 감싸고 있다고 해서 Shell이라고 불린다. 윈도우에는 탐색기와 프롬프트 창 두 가지가 존재하고 리눅스도 GUI와 CLI 둘 다 존재한다. Linux의 쉘 종류 1. bash shell(bourn again shell) 2. csh 3. ksh 4. tcsh 등등이 있다. bash가 모든 유닉스 계열 OS가 가지고 있는 쉘로 가장 많이 쓰인다. 1. root 권한 실행 switch user sudo su - root sudo su - sudo su.. 2023. 1. 23.
docker - 멀티스테이지 빌드 다양한 프론트엔드 프레임워크가 있지만 package.json 파일을 살펴보면 빌드와 개발 환경의 명령어가 다른 것을 확인할 수 있다. react를 기준으로 이야기하자면 아래 사진의 명령어를 보면 react-script라는 서드파티 패키지를 이용한 컴파일이고 start는 개발 모드라고 보면 된다. 개발 모드 - hot-module-replace가 동작해 수정과 동시에 화면이 변경된다. - 에러가 있을시 브라우저에 메시지를 출력한다. - 디버깅을 위한 무거운 서버가 제공된다. - react 코드가 node 환경에 종속되는 것을 의미한다. 운영 모드 - build는 배포 환경에서 사용할 파일을 압축 형태로 만들어준다. 그러면 우리가 선택한 웹 서버의 도움을 받아 스스로 서비스를 제공할 수 있다. - 파일만 있.. 2023. 1. 15.
스프링 DB 2편 - 3 JPA JPA에서 가장 중요한 부분은 객체와 테이블을 매핑하는 것인데 애노테이션을 이용해서 객체와 테이블을 매핑할 수 있다. 간단한 내용이니 간략히 보면 @Data @Entity public class Item { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "item_name", length = 10) private String itemName; private Integer price; private Integer quantity; public Item() { } public Item(String itemName, Integer price, Integer quantity) { this.ite.. 2023. 1. 5.
스프링 DB 2편 - 2 MyBatis 1. 기본설정 build.gradle에 마이바티스 implementation을 해주면서 시작하자. //MyBatis 추가 implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.0' application.properties에는 # MyBatis mybatis.type-aliases-package=hello.itemservice.domain mybatis.configuration.map-underscore-to-camel-case=true logging.level.hello.itemservice.repository.mybatis=trace xml 작성시 리턴 타입에서 패키지 명을 뺄 수 있는 첫 번째 옵션 DB의 스테이.. 2023. 1. 3.
ECS를 이용한 배포 1. 단일 컨테이너를 ECS에 배포하기 ECS를 사용하기 전에 직접 로컬에서 만든 이미지를 docker hub에 올리고 EC2 등의 서버에 ssh 접속을 통해 빌드 해 주는 방법도 있다. 하지만 너무 불편하다 또한 로드 밸런서를 사용하려고 한다면 새로운 서버가 생성될 때마다 배포를 해줘야 하는데 현실적으로 말이 안된다. 따라서 ECS를 사용하려고 한다. ECS는 클러스터, 컨테이너, 테스크, 서비스 네 가지 범주로 구분된다. ECS 설정을 하면서 각각의 레이어가 어떤것을 의미하는지 알아보자. 1. Container 컨테이너부터 만들어보자 네 가지 옵션이 있는데 우선 커스텀 옵션을 통해 단일 컨테이너를 배포해보자. 컨테이너를 만드는데 들어가는 설정들은 모두 docker run 시에 추가되는 옵션이라고 보면.. 2023. 1. 2.
스프링 DB 2편 - 1 JdbcTemplate 기본기능 - JDBC를 사용할 때 템플릿 콜백 패턴을 사용해 직접 사용할 때 발생하는 반복 작업을 대신 처리해준다. - 동적 SQL을 해결하기 어렵다. private final JdbcTemplate template; public JdbcTemplateItemRepositoryV1(DataSource dataSource) { this.template = new JdbcTemplate(dataSource); } 관례적으로 JdbcTemplate은 dataSource가 필요한데 관례적으로 JdbcTemplate은 생성자 주입을 통해 생성한다. save() @Override public Item save(Item item) { String sql = "insert into item(it.. 2022. 12. 21.
스프링 DB 1편 - 3 5. 자바 예외 이해 https://github.com/effectiveJava-study/java-study/blob/main/week9/%EB%B0%B1%EA%B8%B0%EC%84%A0%20%EC%9E%90%EB%B0%94%20%EC%8A%A4%ED%84%B0%EB%94%94%209%EC%A3%BC%EC%B0%A8%20-%20%ED%98%B8%EC%A7%84.md GitHub - effectiveJava-study/java-study: 자바 기초 스터디 자바 기초 스터디. Contribute to effectiveJava-study/java-study development by creating an account on GitHub. github.com 상위 예외를 catch로 잡으면 하위 예외가 모두.. 2022. 12. 12.
스프링 DB 1편 - 2 3. 트랜잭션 이해 트랜잭션은 DB의 핵심 개념으로 여러개의 작업을 하나의 작업단위로 묶어 성공하면 Commit, 실패하면 Rollback 하는 과정을 말한다. 트랜잭션은 ACID라는 것이 있는데 원자성: 모두 성공하거나 실패 일관성: 일관성 있는 데이터베이스 상태 격리성: 동시에 실행되는 트랜잭션이 서로에게 영향을 미치지 않도록. (트랜잭션 격리수준을 선택할 수 있다) 지속성: 트랜잭션을 성공적으로 끝나면 항상 기록되어야 한다. 위의 네 가지 중 격리성을 완벽히 보장하려면 동시처리 성능을 많은 부분 포기해야 하므로 ANSI 표준은 격리 수준을 4단계로 정의한다. 1. READ UNCOMMITED(커밋되지 않은 읽기) 2. READ COMMITTED(커밋된 읽기) 3. REPEATABLE READ(반복 .. 2022. 11. 30.
docker - Docker Compose, utility container Docker Compose 지금까지 하나의 컨테이너 실행을 위해서 길고 긴 명령어를 사용해야 했다. 명령어가 길어지면 오류가 생길 가능성이 높다. 또한 배포 환경에서는 적합하지 않다. Docker Compose란? - docker build와 docker run 등의 명령을 대체할 수 있는 일종의 자동화 도구, 설정파일로 다중 컨테이너 애플리케이션을 시작하거나 중단할 수 있다. - Dockerfile나 Image, Container 대체하는 개념이 아니다. - 단일 호스트에서 멀티 컨테이너 환경을 구축하고자 할 때 적합하다 version: '3.8' services: mongodb: image: 'mongo' # 몽고DB 이미지 이름 지정 volumes: - data:/data/db # 명명된 볼륨 co.. 2022. 11. 13.