-
pessimistic lock, optimistic lock
비관적 락(pessimistic lock) 비관적 락이란 트랜잭션의 시작에 S Lock, X Lock 을 걸고 시작하는 방법 입니다. DB 에 write 를 하기 위해서는 X Lock 을 받아야 하는데 이미 S Lock 이 다른 트랜잭션에 걸려 있어 write 를 위한 Lock 을 얻지 못하므로 앞선 트랜잭션이 종료되기 전까지 수정할 수 없습니다. 낙관적 락(optimistic lock) 낙관적 락은 DB 자체에서 제공되는 락이 아닌 Application Level 에서 주어지는 Lock 입니다. 같은 조건의 경우로 두 건의 트랜잭션이 발생한다고 가정 했을 때,...
ryan's profile imageryan
2021-11-25 10:00
-
command shell
터미널 명령어 개발 업무를 하다보면 피할 수 없는게 커멘드 쉘 프로그램 이다. “Bourne Shell”, “Bash”, “CMD”, “PowerShell”, “fish”, “zsh” 등등 종류도 다양하다. 사용처 역시 웹개발, 원격서버 접속, GIT 명령어 수행, 자동화 도구 스크립트 작성 등 다양하다. 젠킨스 배포 스크립트 예 #!/bin/sh #/var/lib/jenkins/workspace/Kuzal/target/*.jar target=/home/ec2-user/kuzalBE jenkins=/var/lib/jenkins/workspace/Kuzal/target filename=kuzalBE.jar # 파일있으면 삭제 echo "deleting ${filename}" cd $target if test -e $filename then rm -f $filename fi echo "delete done" #jenkins 로 배포된 파일 복사 echo "copying ${filename}" cp $jenkins/*.jar...
ryan's profile imageryan
2021-09-16 10:00
-
Web Server VS WAS
Web Server 란? 웹브라우저로 부터 HTTP 요청을 받아 HTML 문서와 같은 정적 컨텐츠를 응답하는 프로그램 입니다. 정적 컨텐츠 요청시 html, image, css … 등을 제공 할 수있습니다. 동적 컨텐츠 요청시 Web Application Server 로 전달하여 WAS 가 처리한 결과를 Response 합니다. 대표적인 Web Server 에는 Apache, NGINX 와 Windows 전용 WEB 서버인 IIS 가 있습니다 정적 컨텐츠 및 요청 Web Server 는 파일 경로의 이름을 요청 받아 경로와 일치하는 File Contents 를 반환합니다. 그래서 항상...
ryan's profile imageryan
2021-07-08 10:00
-
DTO 와 VO
얼마전 회의중 개발자들 사이에서도 해당 패턴의 이해도에 따라 의견이 분분했던 내용 이었는데, 최근 유명 개발사의 테크유튜브에서 VO 와 DTO 에 대한 발표가 있어서 내용을 정리하고 관련하여 다른 개발자들은 어떻게 생각하고 있는지 찾아서 정리해 보았습니다. 결론 DTO (Data Transfer Object) : 데이터를 전달하기 위한 객체 VO (Value Object) : 값 전달을 위한 객체 혼동의 이유는 무엇일까? DTO 와 VO 라는 키워드로 검색해보면 많은 글들이 보이고, 이러한 글을 쭉 읽어보면 CORE J2EE PATTERNS 책에서 그 원인이 발생했을...
ryan's profile imageryan
2021-05-04 10:00
-
개발자고민
개발자고민 40대 후반 어느 개발자의 고민 수많은 세월 개발자로 몸담아 왔지만 베테랑 개발자에 대한 대우는 좋지 못하다. 아직까지 한국 회사의 대부분은 경력이 쌓이면 쌓일수록 관리직으로 직책을 변경하려 하고 경력을 인정해주기 보다는 비용을 적게 주려고 노력한다. 클리앙에 올라온 글에 대한 생각 okky 에 올라온 글에 대한 생각 어떤 고민/생각 을 해봤나? 크고 작은 변화를 거쳐 왔지만 계속 기술은 발전하고 다양해 지는데 습득 속도는 이전만 못하고 어딘가 뒤쳐지는 느낌을 지울 수가 없다. 언제까지 할 수 있을지 의구심이...
ryan's profile imageryan
2021-02-25 09:00
-
JPA - 연관관계매핑(기초)
엔티티매핑의 기초 기본키 매핑 전략 영속성 컨텍스트는 엔티티를 식별자 값으로 구분하므로, 엔티티를 영속 상태로 만들려면 식별자 값이 반드시 필요하다. 아래에서 간단히 기본키 매핑 전략에 대해서 알아보자. 직접할당 : em.persist() 를 호출하기 전에 애플리케이션에서 직접 식별자 값을 할당해야한다. Board board = new Board(); board.setId("id1"); em.persist(); IDENTITY : 데이터베이스에 엔티티를 저장해서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다. @Id @GeneratedValue(strategy=GenerationType.IDENTITY) SEQUENCE : 데이터베이스 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다. @Entity @SequenceGenerator( name = "BOARD_SEQ_GENERATOR", sequenceName...
ryan's profile imageryan
2020-12-02 10:00
-
JPA(패러다임불일치, 영속성)
패러다임 불일치 애플리케이션은 자바라는 객체지향 언어로 개발하고 데이터는 관계형 데이터베이스에 저장해야 한다면, 패러다임의 불일치 문제를 개발자가 중간에서 해결해야 한다. 객체는 상속 이라는 개념을 가지고 있지만 테이블은 상속이라는 기능이 없으며 이를 해결하기 위해서 슈퍼타입 서브타입 관계를 사용하여 객체 상속와 유사한 형태로 테이블 설계가 가능 하다. JDBC API 를 사용해서 Album, Movie 객체를 저장하는 코드를 완성하기 위해서는 각 객체를 저장하는 SQL 을 생성해야 하며 이때, Item 테이블 저장 쿼리도 개발이 필요하다. 조회의 경우, Album 을 조회하기 위해서는...
ryan's profile imageryan
2020-09-09 10:00
-
JPA(Java Persistence API)
자바 ORM 표준 JPA 는 자바에서 제공하는 API 로 자바 ORM 기술에 대한 표준 명세이다. JPA 는 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다. JPA를 사용하기 위해서는 JPA를 구현한 Hibernate, EclipseLink, DataNucleus 같은 ORM 프레임워크를 사용해야 한다. 자바 진영에서 힘을 모아서 만든 ORM 기술 표준이며, 스프링 진영에서도 스프링 프레임워크 자체는 물론이고, 스프링 데이터 JPA 라는 기술로 적극 지원하고 있다. 구글 트렌드 검색결과 (최근5년) Hibernate, JPA, mybatis, SPRING DATA JPA 순 ORM vs Sql Mapper...
ryan's profile imageryan
2020-07-08 17:00
-
x86 x64...
x86 x64… X86 Ref. https://namu.wiki/w/인텔 4004 x86은 인텔에서 개발한 8086에 적용된 명령어 세트이자 그 호환 프로세서 또는 후속작을 부르는 말이다. 8086은 1978년 출시되어 40년이나 된 오래된 명령어 세트이지만 이후에 출시되는 프로세서들은 8086의 명령어 세트를 기반으로 하여 확장된 것이다. x86 또는 80x86이라는 이름은 여기에 속하는 초기의 프로세서들 이름이 모두 80으로 시작해서 86으로 끝났기 때문에 붙여졌다. 여기에는 8086, 80186, 80286, 80386, 80486이 포함된다. XT, AT… 286 그리고 16bit Ref. 추억의 삼보 Trigem XT와 AT 1978년 인텔이 최초의...
ryan's profile imageryan
2020-04-15 22:00
-
java serializable
직렬화란? 직렬화 : JVM의 메모리에 상주되어 있는 객체 데이터를 바이트 형태로 변환하는 기술 (자바 내부에서 사용되는 객체/데이터를 외부 자바 시스템에서도 사용할 수 있도록 함) 역직렬화 : 직렬화 된 바이트 형태의 데이터를 JVM 에서 사용 하도록 다시 객체로 변환하는 기술 [출처] https://ktko.tistory.com 어떤 조건이 필요한가? 직렬화 : “java.io.Serializable” 인터페이스를 상속받은 객체 기본형 타입(int, char, String, short, double, long, byte 등등)은 직렬화가 가능 transient가 사용된 멤버는 전송되지 않는다 생성자나 메소드는 직렬화 대상에 속하지 않는다 역직렬화 : 직렬화...
ryan's profile imageryan
2020-02-05 10:00
-
equals() And hashCode()
객체를 비교하는 방법 연산자(==), ‘equals()’, ‘hashCode()’ 연산자(==) 두 객체가 같은것을 가르킬 때 “true” 를 리턴. == 연산자는 피연산자가 primitive type(int, double, boolean, …)일 때는 값이 같은지 비교하고, 피연산자가 그 외 객체, reference type일 때 가리키는 주소가 같은지를 검사한다 아래의 예제는 연산자 비교 차이에 대한 이해를 돕기 위해 String 객체를 예로 들었다. equals() equals는 내용이 같은지를 검사하는 메서드. Primitive Type은 내용이 같은지 검사하고 Reference Type은 객체의 주소가 같은지 검사 한다. ‘==’ 연산자와 다른 점은 완전히 같은...
ryan's profile imageryan
2019-11-21 01:00
-
java GC
시작에 앞서.. java GC 를 다루게 된 것은 별다른 이유가 있는 것은 아닙니다. java 개발을 하고 있고 언젠가 봐야지 하며 미루던 것을 하나씩 정리 하려고 합니다. 앞으로도 java 또는 개발에 필요한 기초를 하나씩 점검해 보고자 합니다. Hello World? Stop the World! GC 를 실행하기 위해 JVM 이 어플리케이션 실행을 멈추는 것. stop-the-world 가 발생하면 GC 를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤 GC 를 튜닝 한다는 것은 “stop-the-world” 의 시간을 줄이는 것. 객체와...
ryan's profile imageryan
2019-08-25 10:00
-
GIT tutorial
작성에 앞서 해당 POST 는 git 초보자를 위한 글 임을 밝힙니다. 요즘 대세는 git 인데 우리는 여전히 svn 에 의존하고 있습니다. svn 은 개념적으로 접근이 쉽습니다. 개발자는 늘 새로운것에 친숙해야 하는데 쉬움에 동반되는 편안함이 변화와 트랜드를 멀리하게 만드는 것은 아닐까요? (제 얘기 입니다. 비단 버전 컨트롤에 해당 되는 이야기는 아닌것 같지만…) 소위 잘나가는 개발사와 개발자들은 git 으로 형상 관리를 하고 있습니다. 현장에서 git 을 쓰는데는 나름의 이유가 있을 것이고 이 글에서는 그 이유를 공유하고 초보자가...
ryan's profile imageryan
2019-06-11 10:00