반응형

# 1. Language/☕ Java 13

ubuntu EC2 서버 mysql 연결 에러 # Can't connect to local mysql server through soket '/var/run/mysqld/mysqld.sock' (2)

Ubuntu에서 나의 서버에 접속해(로컬X) $ sudo mysql 해주었을 때 ERROR 2002 (HY000): Can't connect to local mysql server through soket '/var/run/mysqld/mysqld.sock' (2) 의 에러가 떴다. 그리고 Workbench에서는 아래와 같은 에러가 떴다. Cannot Connect to Database Server Your connection attempt failed for user 'root' to the MySQL server at x5x103.x.ssafy.io:3306: Unable to connect to localhost 그래서 Ubuntu 환경에서 아래와 같이 mysql을 일단 멈추고 다시 시작해보았다. ..

JPA # 저장할 때와 수정할 때의 동작과정

저장할때 JPA 의 경우 트랜잭션 실행 단위안에서 동작한다. 엔티티 매니저에 의해서 생성된 객체를 영속성 컨텍스트에 등록한다. 이때 해당 객체는 영속상태가 되어 1차 캐시에 저장된다. 또한 insert 쿼리는 쓰기지연 SQL저장소에 저장이된다. 트랜잭션이 끝나는 시점에 쓰기 지연 SQL 저장소에 있는 쿼리문들이 flush가 되고 트랜잭션 커밋이 된다. 수정할때 우선 수정할 엔티티를 찾는다. 이때 1차 캐시에 올라가고 영속상태가 된다. 즉 영속성 컨텍스트가 관리하는 상태가 된다. 그리고 set~~()으로 데이터를 수정한다. 이때 JPA는 데이터베이스 트랜잭션 커밋 시점에 내부적으로 flush가 되는데 영속성 컨텍스트 기능중 변경감지 기능이 있어서 이 것이 현재 1차 캐시의 엔티티와 최소 1차 캐시에 등록된..

DTO와 VO

DTO Data Transfer Object 계층간 데이터 교환을 위한 객체(Java Beans)이다. 즉, 데이터를 객체로 변환시킨다. C#과는 달리 Java에서는 프로퍼티를 문법적으로 제공해주지 않기 때문에 getter/setter에서 get과 set 다음에 나오는 단어가 프로퍼티라고 약속해주었다. 즉, getter/setter에 의해 만들어진 것에 의해 프로퍼티가 결정된다는 말이다. 자바에서는 다양한 프레임워크에서 데이터 자동화 처리를 위해 리플렉션 기법을 사용한다. 그런데 이 데이터 자동화 처리에서 가장 중요한 것이 표준규격이다. 즉, DTO에서 프로퍼티가 name, age면 여기에 키값으로 들어온 데이터는 리플렉션에 의해 setter를 실행시켜 데이터를 넣을 수 있는 것이다. 그런데 setter..

Boolean과 boolean의 차이 = 참조타입과 원시타입의 차이

우선, Boolean과 boolean의 차이를 알아보자. Boolean (참조타입; reference type) true, false, null 값을 가진다. ∴ Null 체크를 필요로할 때 참조형을 사용하자. boolean (원시타입; primitive type) true, false 값을 가진다. ∴ Null 체크가 불필요한 경우 자료형을 사용하자. (Unboxing을 해줄 필요가 없기 때문에 시간을 단축시킬 수 있다.) 참조타입과 원시타입의 차이 자료형 : int, float, double, char, boolean 참조형 : Integer, Float, Double, Boolean 자료형을 객체로 감싼 것이 참조형이다. 원시타입은 null을 담을 수 없는 반면에 참조 타입은 null을 입력값으로 ..

SpringBoot # Controller-Service-DAO-mapper.xml

Mybatis의 기능 DB 커넥션을 맺고 끝는 것을 자동화해줌. SQL 쿼리를 실행 및 결과를 DTO에 알아서 세팅해줌. mapper.xml DAO의 요청에 따라 사용할 SQL 쿼리문을 작성하는 곳. .xml에 정의된 이름과 DAO인터페이스에 정의된 메소드 이름이 같은 것 끼리 매핑된다. DAO(Data Access Object) 실제로 DB에 접근해 데이터를 조회 및 조작하고 그 결과값을 리턴해 준다. .xml에 정의된 이름과 DAO인터페이스에 정의된 메소드 이름이 같은 것 끼리 매핑된다. DB에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용. DTO(Data Transfer Object). Request와 Reponse가 일어날 때 DTO의 틀에 맞게 데이터를 담아 Service나 Cont..

JPA의 Entity와 Repository

Entity 데이터 베이스에 저장하기 위해 정의한 클래스. Domain이라 생각하면 된다. 유저가 직접 정의한 클래스다. RDBMS의 테이블을 객체화시킨 것과 같다. 따라서 테이블의 이름과 컬럼 정보들을 가지고 있다. @Id PK값으로 두려는 변수를 선언. @GeneratedValue 어노테이션을 통해 Id값을 어떻게 생성할지에 대해 설정할 수 있다. @Table 별도 이름을 가진 DB 테이블과 매핑하며, @Table(name=" ")와 같은 방식으로 사용한다. 풀어서 설명하자면, 기본적으로 @Entity로 선언된 클래스 이름은 실제 DB의 테이블 명과 일치하는 것을 매핑함. 따라서 @Entity의 클래스 이름과 DB 테이블 명이 다른 경우에 매핑할 때 사용한다. @Column @Column(name="..

자주 사용되는 Lombok 어노테이션

Lombok이란? VO, DTO, Entity 등을 쉽게 작성할 수 있도록 도와주는 라이브러리. 코드를 깔끔하게 작성할 수 있어 가독성이 좋아진다. 하지만 제대로 알지 못한채 사용하게 되면 예상치 못한 문제가 발생할 수 있다. @Getter @Setter 자동으로 get, set 메소드를 생성해준다. 기본적으로 public으로 생성된다. AccessLevel 옵션을 사용하여 접근권한 설정을 달리해줄 수 있다. @NoArgsConstructor 파라미터가 없는 기본 생성자를 만들어준다. 이 역시 AccessLevel 옵션을 사용하여 접근권한 설정을 달리해줄 수 있다. 이 때 PROTECTED로 설정하여 안전성을 보장해주자. 예) access = AccessLevel.PROTECTED @Tostring to..

Java # zulu란? / zulu 다운로드 방법

Zulu란? Zulu를 사용하는 이유? Open JDK 이전까지만 해도 Oracle JDK를 사용했으나 Oracle JDK 8이 2019년 1월 부터 유료화되었기 때문에 Open JDK를 사용. Open JDK와 Oracle JDK는 동일 사양이기 때문에 100% 오픈소스 및 무료인 Open JDK를 사용하자. 또한 Zulu를 설치하면 개발 환경과 운영 환경을 통일시킬 수 있다는 장점이 있다. Zulu 다운로드 Downloads Download Azul Platform Prime Azul Platform Prime extends Core, adding unique Azul innovations to improve the runtime characteristics of Java workloads. Azul..

공통 프로젝트 # 사용했던 프로그램들의 버전

Docker Docker version: 20.10.7 MariaDB MariaDB version: 10.3.31 Spring-boot Spring-boot version: 2.2.2 RELEASE Java Java version: 1.8 Maven Maven version: 4.0.0 STS Spring Tool Suite 3 version: 3.9.14.RELEASE Swagger Swagger version: 2.6.1 Mybatis Mybatis version: 2.1.4 이번 공통 프로젝트에서는 CI/CD를 위해 Jenkins를 사용해보지못했다. 다음 특화프로젝트에서는 Jenkins를 사용해보고싶고 배포도 한 번 직접 해보고싶다.

반응형