본문 바로가기

JAVA

Java 멀티쓰레드 동기화 - (2) Synchronized Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 이번에는 synchronized 키워드에 대해 얘기해보겠습니다. https://wjdtn7823.tistory.com/65 Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cach wjdtn7823.tistory.com 1. synchronized 키워드 synchronized는 여러개의 스레드가 객체에 접근하는 것을 제어하여 객체의 thread-safe를 가능케 하는 방식입니다. syncho.. 더보기
Java 멀티쓰레드 동기화 - (1) Volatile Java에는 멀티쓰레드 환경에서 동기화를 하기 위한 3가지 방법이 있다. 그중 Volatile 키워드에 대해서 설명하겠습니다. 1. volatile 키워드 JAVA에서 volatile 키워드는 변수를 read 하고 write 할때 CPU cache가 아닌 메인 메모리에다가 한다고 명시적으로 선언하는 것이다. 보통의 메모리 구조는 아래와 같이 생겼다. CPU 내에는 성능 향상을 위해서 L1 cache가 내장 되어있습니다. 쓰레드에서 같은 변수를 참조하려고 해도 쓰레드마다 다른 캐시를 참조하기 떄문에 불일치 문제가 생깁니다. 이해하기 쉽게 한쪽 쓰레드에서는 flag 를 검사하는 쓰레드(쓰레드 1), 한쪽 쓰레드에서는 flag의 값을 바꾸는 (쓰레드2) 2개의 쓰레드를 만들었습니다. public class T.. 더보기
JPA 프록시와 연관관계 관리 1. 프록시 패턴 - 프록시 패턴이란 실제 객체 대신 가상의 객체(Proxy Object)를 사용하는 디자인 패턴이다. 이를 이용하여 실제 객체에 대한 접근 제어 용도로 사용할 수 있다. 프록시 객체에는 실제 객체의 레퍼런스를 가지고 있다. 또한 프록시와 객체 클래스 모두 똑같은 인터페이스를 구현하고 있기 때문에 실제 객체와 동등하게 사용할 수 있다. 클라이언트는 객체를 직접 접근하는 것이 아니라 프록시를 중간에 두고 실제 객체와 데이터를 주고 받는다. 2. JPA에서의 프록시 회원과 팀의 엔터티 관계를 생각할때 비즈니스 로직에 따라 회원을 조회할 때 그와 연관된 팀 엔터티가 항상 필요한 것은 아니다. JPA 에서는 이런 문제를 해결하기 위해 지연로딩을 이용하여 해결한다. (지연 로딩이란 값을 실제 사용.. 더보기
Spring Data JPA 1. Spring Data JPA란? 스프링 데이터 JPA는 스프링 데이터의 하위 프로젝트로 JPA 를 한단계 추상한 Repository 인터페이스를 제공한다. 스프링 환경에서 JPA를 사용하게 되면 보통 스프링 데이터 JPA를 사용하게 된다. 스프링 데이터 JPA를 사용하기 위해선 spring-data-jpa 의존성을 추가해야된다. 다음과 같이 추가할수 있다. org.springframework.data spring-data-jpa 2.3.3.RELEASE 스프링 데이터 JPA의 장점은 어플리케이션을 실행할때 Repository 인터페이스를 찾아서 해당 인터페이스를 구현하는 클래스를 동적으로 생성해서 빈으로 등록하기 떄문에 개발자가 직접 Repository 클래스를 구현할 필요가 없다. 2. JpaRe.. 더보기
JDBC, MyBatis 1. JDBC 란? 자바 어플리케이션에서 데이터베이스(DBMS)에 접근 하기 위한 자바 표준 SQL 인터페이스 API 단, JDBC는 표준적인 API 인터페이스만 제공할 뿐 실질적인 드라이버는 DBMS 제조사에서 제공한다. JDBC 를 사용하기 위해서는 다음과 같이 의존성을 추가 하면된다. org.springframework spring-jdbc 5.2.8.RELEASE 2. JDBC 프로그래밍 흐름 2-1) JDBC Driver 로드 Class.forName("oracle.jdbc.driver.OracleDriver"); forName은 클래스로더로 해당 데이터베이스 드라이버를 JVM에 로드 하는 역할을 한다. https://coneseo.tistory.com/32 Class.forName()의 동작 .. 더보기
JAVA 8 - 람다 추가 3. 함수형 인터페이스 활용하기 3.1 java.util.function 패키지의 함수형 인터페이스 다음은 함수형 인터페이스들이다. 함수형 인터페이스 Descriptor Method명 Predicate T -> boolean test() Consumer T -> void accept() Supplier () -> T accept() Function T -> R apply() UnaryOperator T -> T identity() 1. Supplier 입력 값 없음 -> return value 만 있는 람다 함수. Supplier는 lazy evaluation 으로 연산상의 이득을 볼수 있다. Lazy evaluation 이란 불필요한 연산을 줄이기 위해 연산을 최대한 늦추는 것을 말한다. 만약 엄청 오.. 더보기
JAVA 8 (2) - Optional 1. NullPointerException 그리고 Optional 의 필요성 대부분의 개발자들은 한번씩은 NullPointerException(NPE) 로 인해 고통받은 경험이 있을것이다. 다음과 같은 클래스들이 있다고 가정하자. public class Order { private Long id; private Date date; private Member member; // getters & setters } /* 회원 */ public class Member { private Long id; private String name; private Address address; // getters & setters } /* 주소 */ public class Address { private String st.. 더보기
웹서버 vs WAS 1. 정적 페이지 vs 동적 페이지 정적 페이지 :클라이언트의 요청에 해당하는 파일 경로 이름 받아 파일로 전해줌(html, css ,javascript , 이미지 등등) => 항상 동일한 페이지를 변환함(Static page) ex) GET index.html 동적 페이지 : Request Parameter에 맞게 기능을 수행해서 만들어진 결과물을 반환함(Servlet) 2. 웹서버 vs WAS (웹 어플리케이션 서버) 2-1) 웹서버 : HTTP 프로토콜 기반으로 클라이언트의 요청을 처리하는 서버 -> 정적인 페이지 제공(WAS 거치지 않고) -> 동적인 페이지 제공을 위해 요청을 Web Container에 전달하고 처리한 결과를 클라이언트에게 전달 ex) Nginx 설정파일 WAS (Web Appl.. 더보기