본문 바로가기

Development

(45)
IntelliJ 로 SpringBoot + Gradle 프로젝트 생성하기 개인 프로젝트를 위해 고민하다가, 편하게 스프링 부트를 사용하기로 했다. 이런 저런 설정 잡는 것도 중요하긴 하지만 이번 프로젝트의 목적은, 프로덕트 생산 과정의 흐름을 체득하기 위함이기 때문에 초반 Configuration에 수고를 좀 덜고 싶었다. (처음에 Configuration만 하다 지쳐서 중간에 몇 번 포기한 적이 있기 때문에) 별건 아니지만 대망의 프로젝트 시작을 알리는 의미로 정리를 해보려 한다. 개발환경은 OSX El Capitan과 IntelliJ 15. (둘다 버전업을 해야 하는데 귀찮아서 이러고 있다.) IntelliJ 에서도 STS와 마찬가지로, 스프링 부트 프로젝트를 굉장히 편하게 생성할 수 있다.[New Project] - [Spring Initializr] 에서 몇 번의 클릭..
MySQL 원격 접속용 계정 생성 연습 프로젝트를 위해 AWS EC2에 JDK, Tomcat, MySQL 등을 세팅하고 있는데, 프로젝트 서버 세팅을 해본 적은 처음이라 애를 먹으며, 폭풍 구글링을 했다. 내 로컬 PC(혹은 외부)에서 원격으로 MySQL 접속을 위해 몇가지 설정이 필요 하다는 것을 알았다. 1. 원격 접속용 MySQL 계정. 1CREATE USER 'name'@'ip' IDENTIFIED BY 'password';cs name : 사용자 계정 ip : 출발지 IP ( Any : % , 특정 대역 : xxx.xxx.%)password : 비밀번호 2. 해당 계정에 필요한 권한을 준다. 나는 모든 권한을 부여 했다. 123GRANT ALL PRIVILEGES ON *.* TO 'name'@'ip' WITH GRANT OPT..
익명 클래스 → 람다 표현식 변환 시 주의할 점. 익명클래스에 비하여 람다표현식의 가독성은 굉장히 우수하다.아래의 예를 보자.(line 1:6) 과 line 8 은 동일한 의미이다 ! 12345678Runnable runnable1 = new Runnable() { @Override public void run() { System.out.println("Hi"); }}; Runnable runnable2 = () -> System.out.println("Hi");cs 하지만, 익명 클래스를 람다 표현식으로 변환 하고자 할때 몇 가지 주의할 점이 있다. 1. '익명 클래스'와 '람다 표현식'의 this는 다른 의미이다. 익명클래스의 this 는 익명클래스 자신을 지칭하지만, 람다 표현식에서의 this 는 선언된 클래스를 가리킨다. 예를 들면, 다음 코드에..
자바8 util 패키지에서, 람다 표현식 연습해보기 자바8 util 패키지의 함수형 인터페이스를 통해 람다 표현식을 요리 조리 잘 요리할 수 있다.아주 기본적인 인터페이스들을 가지고 연습해봤다. Comparator - int compare(T o1, T o2); 123456// 몸무게 순으로 오름차순 정렬Comparator memberComparator = (m1, m2) -> m1.getWeight().compareTo(m2.getWeight()); memberComparator.reversed() // 몸무게 내림차순으로 정렬, chaining 표현 가능 .thenComparing(Member::getAge); // 몸무게가 같을시, 나이 오름차순 정렬 Colored by Color Scriptercs Predicate - boolean test(T ..
람다 표현식에서 참조하는 지역 변수가 꼭 final이어야 하는 이유 람다 캡처링(Capturing lambda) 람다 표현식에서는 익명 함수에서와 마찬가지로, 외부에서 정의된 변수(* 책에서는 자유변수free variable 라고 소개됨)를 활용할 수 있다.(이와 같은 액션을 람다 캡처링(capturing lambda)라고 소개되어 있다) 즉, 람다 표현식에서는 인스턴스 변수, 정적 변수등을 자유롭게 body에서 참조하여 사용할 수 있다.하지만 지역 변수를 사용하기 위해서는 지역 변수가 반드시 final 로 선언되어 있어야 한다는 제약 조건이 있다. 1234567891011// In Any Method...{ ... String name = "Variable";Runnable r = () -> System.out.println(name); ... }Colored by C..
enum 수정 후 deploy 시 문제점. 필요에 의하여 enum을 수정할 일이 있었다.즉, enum에 값을 추가한 뒤, 해당 값을 사용하는 로직을 배포했다. 그런데 갑자기 Error가 엄청나게 올라오기 시작했다. 로직의 결함은 전혀 없었는데 도대체 왜 Error가 발생 했을까? 이 2가지 상황을 고려하면 내가 발생시킨 Error는 당연한 것으로 보인다. 내가 배포한 서비스는 다수의 서버에서 실행된다.다수의 서버를 동시에 배포하면 서비스에 차질이 있므로, 순차적으로 배포했다. 다음의 예를 보면 알 수 있다. 기존의 서비스에서 한 enum 클래스가 아래와 같이 존재할 때, [Old Enum]12345public enum Color { BROWN, YELLOW, WHITE}cs이 Enum을 아래와 같이 변경한다. [New Enum]123456publ..
자바8. 람다 표현식에 대하여. JAVA8 의 람다 표현식 메소드로 전달할 수 있는 익명함수를 단순화 한 것이라고 보면 된다.익명함수의 성질을 동일하게 가지지만 표현이 훨씬 더 간단하며, 메소드 파라미터로 전달하거나 변수로 저장할 수 있다. 다시 설명하면, 함수형 인터페이스의 추상 메소드의 구현체를 간단하게 표현하는 것이라고 생각하면 된다. 함수형 인터페이스 정확히 하나의 추상메소드를 지정하는 인터페이스이다. JAVA 8로 넘어 오면서 @FunctionalInterface 애노테이션이 추가되었는데, 이 함수형 인터페이스를 지칭할 때 사용한다. 함수형 인터페이스가 아닌 ( = 추상메소드가 2개 이상인) 인터페이스 사용하면 컴파일 에러가 발생한다. 단, default 메소드는 제외한다. 1234@FunctionalInterfacepubli..
트랜잭션, 트랜잭션 격리수준(Isolation Level) 1. 트랜잭션이 보장해야 하는 ACID격리수준을 설명하기에 앞서 ACID에 대해 알아보자. 원자성 (Atomicity) : 한 트랜잭션 내에서 실행한 작업들은 하나의 작업으로 간주한다. 모두 성공 또는 모두 실패되어야 한다. 일관성 (Consistency) : 모든 트랜잭션은 일관성 있는 데이타베이스 상태를 유지한다. 이를테면 DB에서 정한 무결성 조건을 항상 만족.격리성 (Isolation) : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리 해야한다.지속성 (Durability) : 트랜잭션을 성공적으로 마치면 그 결과가 항상 저장되어야 한다.이 중 격리성(Isolation)에 대한 이슈가 있다.격리성을 완벽히 보장하기 위해 모든 트랜잭션을 순차적으로 실행한다면 동시성 처리 이슈가 발생한..