모르지 않다는 것은 아는것과 다르다.

분류 전체보기 224

JDK, JRE, SDK, JavaSE, JavaME, JavaEE 정리

JDK, JRE, JDK 비교 JDK Java Development Kit의 약자다. java 관련 각종 라이브러리가 들어있다. 개발자만을 위한 컴파일러(javac), 디버깅툴 등을 제공한다. 개발자 및 사용자를 위한 JAVA인 JRE(+JVM)을 포함한 종합 툴이다. java 는 컴파일한 후 바로 돌리는 compiled language 방식이 아니라, 자바가상머신으로 자신의 고유 환경을 구축한 후, 돌아가기 때문에 자바 컴파일러와 자바 가상 머신이 모두 필요하고, 이 둘을 묶어서 JDK 라고한다. 다시말해, Java로 된 언어를 컴파일하고 개발할 수 있도록 해주는 개발 환경의 세트를 의미한다. JRE Java Runtime Environment 의 약자다. JDK 같은 개발 키트 개념은 아니다. JDK..

Other 2022.02.28

java (Spring)로 Shell Script 실행 하기

shell scrip 작성 //결로 /tmp/sh_aaaa_7010.sh echo "test shell scrip!!" //결로 /tmp/sh_test_9010.sh echo "test shell scrip!!" //결로 /tmp/sh_xxxx_9010.sh echo "test shell scrip!!" tmp 디렉토리 하위에 3개의 shell scrip 파일을 생성한다. 파일 접근 권한 설정 sudo chmod 777 /tmp : tmp 디렉토리에 대한 r: 읽기권한, w: 쓰기권한 x: 실행권한 부여 sudo chmod a+x sh_aaaa_7010.sh sudo chmod a+x sh_test_9010.sh sudo chmod a+x sh_xxxx_9010.sh 위와 같이 세개의 shell scri..

Other 2022.02.28

Lombok 사용시 주의할 점

개요 실무에서 Lombok 사용시 주의할 점들을 정리해 보고자 한다. @Setter 를 지양하자 도메인 객체들에게 @Setter 를 사용하는 건 바람직하지 못하다. Setter 와 같이 데이터에 변경이 일어나는 메소드는 그에 합당한 명분이 필요하다. 그렇기 때문에 그에 합당한 메소드명을 명명해서 메소드의 의도를 정확히 표현하는 것이 바람직하다. 당연하겠지만, @Setter 를 포함하고 있는 @Data 도 지양하는 것이 바람직하다. 객체를 생성하고 싶을때에는 아래와 빌더패턴을 적용하는 것이 바람직하다. ToString 의 순환참조를 주의하다. 양방향 연관관계시 순환 참조로 인해서 문제가 발생한다. 아래와 같이 ToString 항목을 제외시킴으로써 해결할 수 있다. @ToString(exclude = "me..

Other 2022.02.28

MDC (Mapped Diagnostic Context)

MDC 란? MDC 는 java.util.Map 형식을 이용하여 클라이언트 특징적인 데이타를 저장하기 위한 메카니즘이다. 요즘 웹 어플리케이션은 멀티 스레드로 동작한다. 그렇기 때문에 서블릿은 어떤 클라이언트에 호출되더라도 같은 로그 기록을 남기는데, 이렇게 할 경우에 오류가 발생했을 때 어떤 클라이언트를 담당하는 스레드에서 오류가 발생했는지 알기 힘듭니다. 예를들어 서버 C에서 요청이 시작돼서 A에서 오류가 발생했다. 오류를 추적하기 어렵다. -> 그래서 requestID 등을 부여해서 로그를 적재시켜나가면 오류를 찾을 수 있을것이다. 현재 log4j 및 logback 만 MDC기능을 제공하고 있다. springboot 환경에서는 spring-boot-starter-web을 의존성으로 추가하면 logb..

Spring Cloud 2022.02.28

프로시저

프로시저란 프로시저란 SQL Server에서 제공하는 프로그래밍 기능이다. 일반 함수가 하는 것과 거의 비슷한 일을 하고 개념도 비슷하다. 다만 이것을 DB서버측에 위치한다. 특정 작업을 수행하는, 이름이 있는 PL/SQL BLOCK 이다. 매개 변수를 받을 수 있고, 반복적으로 사용 할 수 있는 BLOCK 이다. 보통 연속 실행 또는 구현이 복잡한 트랜잭션을 수행하는 PL/SQL BLOCK을 데이터베이스에 저장하기 위해 생성한다. 쿼리문을 마치 하나의 메서드 형식으로 만들고 어떠한 동작을 일괄적으로 처리하는 용도로 사용된다. 여러 개의 칼럼을 조회하고 여러 개의 테이블을 조인하고 거기에 조건까지 넣어줌으로써 하나의 쿼리를 만드는데 엄청나게 긴 쿼리문이 생기게 된다. 이러한 여러개의 쿼리를 사용할 때마다..

Database 2022.02.27

트랜잭션 격리수준(Isolation level)

트랜잭션 격리수준 동시에 여러 트랜잭션이 처리되는 상황에서 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것을 말한다. ACID 원자성(Atomicity) : 트랜잭션은 모두 실행되거나 아예 실행되어서는 안된다. 성공적인 트랜잭션은 commit 하고 실패한 트랜잭션은 rollback 한다. 일관성(Consistency) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지되어야 한다. 각 트랜잭션은 일관성을 보장하도록 프로그램을 작성해야 한다. 격리성/독립성(Isolation) : 하나의 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료되기 전에 갱신중인 데이터에 다른 트랜잭션에 영향을 주지 않아야 한다. 지속성(..

Database 2022.02.27

조인

조인의 종류 먼저 INNER 조인과 OUTER 조인을 비교해보자 INNER JOIN : 공통적인 부분만 select 한다. LEFT OUTER JOIN 조인 기준으로 왼쪽에 있는 데이터를 전부 select 한다. 이제 JPQL 에서는 join을 어떻게 처리하는지 알아보자. 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t 이 경우 member는 있고 팀이없으면 해당 데이터가 나오지 않는다. 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t member 를 기준으로 team 을 붙인다. -> 테이블의 가로[컬럼들]가 넓어진다. 이 경우는 member는 있고 팀이 없어도 데이터가 나온다. -> team 은 null로 ..

Database 2022.02.27

Spring Data Jpa Bulk Insert

개요 업무를 진행하면서 대량의 데이터를 대량으로 생성해서 일괄로 저장할 일이 있었다. 개발을 진행하는 과정에서 데이터를 하나하나 insert 하다보니 성능적인 이슈가 있었고, bulk insert와 같은 키워드로 구글링을 해보니 Hibernate Batch Insert라는 내용을 찾을 수 있었다. batch insert 란? batch insert 는 대량의 SQL Statement 를 하나의 구문으로 처리할 수 있는 방법입니다. 아래와 같이 SQL 저장소에는 등록 쿼리가 2건이 저장된다. 트랜잭션을 커밋 하면 엔티티 매니저는 우선 영속성 컨텍스트를 플러시 한다. 플러시는 영속성 컨텍스트의 변경 내용을 데이터베이스에 동기화하는 작업인데 이때 등록, 수정, 삭제한 엔티티를 데이터베이스에 반영한다. 이렇게 ..

Database 2022.02.27

Spring JDBC

Spring JDBC 란? JDBC Template은 Spring JDBC 접근 방법 중 하나로, 내부적으로 Plain JDBC API를 사용하지만 위와 같은 문제점들을 제거한 형태의 Spring에서 제공하는 class이다. 스프링에서 DB를 사용하기 위한 오리지날 디펜던시라고 할 수 있디. MyBatis 처럼 XML을 이용해 의존성을 주입한 후, 사용하는 방식이다. 순수 JDBC를 사용할 때, PrepareStatement, CreateStatement, ResultSet 등 자주 사용하는 객체와 코드들을 클래스화 하여 스프링 애플리케이션에서 보다 더 편하게 DB에 접근할 수 있는 인터페이스를 제공한다. 순수 Jdbc와 동일한 환경설정을 하면 된다. 스프링 JdbcTemplate과 MyBatis 같은 ..

Jdbc 2022.02.27

JPA vs MyBatis

SQL Mapper vs ORM Persistence Framework 는 SQL Mapper 와 ORM 으로 나눌 수 있다. SQL Mapper RDBMS 쿼리문의 실행 결과를 자바 코드에 매핑하는 프레임워크이다. SQL Mapper 메소드를 SQL 실행결과와 매핑한다. Object와 SQL의 필드를 매핑하여 데이터를 객체화한다. SQL문을 이용하여 RDB에 접근, 데이터를 오브젝트(객체)화 시켜준다. 개발자가 작성한 SQL문으로 해당되는 ROW를 읽어 온 후 결과 값을 오브젝트화 시켜 사용가능하게 만들어준다. RDB에 따라 SQL 문법이 다르기 때문에 특정 RDB에 종속적이다. 대표적인 기술로 Mybatis 가 있다. ORM ORM 은 Object와 DB테이블을 매핑하여 데이터를 객체화하는 기술이다...

Jdbc 2022.02.27