목록💡 백엔드/Java (74)
코딩마을방범대
@Configuration, XML 기반으로도 트랜잭션을 구성할 수 있지만 이번엔 어노테이션을 이용한 방법으로 알아볼 것이다. 어노테이션 방식은 선언적 트랜잭션이라고 불리고, 선언 시 트랜잭션 기능이 적용된 프록시 객체가 생성된다. 프록시 객체란 앞서 포스팅했던 '프록시(Proxy)란' 과 비슷한 개념을 갖고 있다. 객체와 DB 사이의 중간 다리 역할을 해주는 또 다른 객체라고 볼 수 있다. 만약 사용자가 객체의 get을 이용해 데이터를 조회했을 때, 프록시 객체의 Entity Target 값이 비어있다면 DB를 조회해 Entity 생성 후 프록시 객체의 타겟 값으로 저장한다. 이 프록시 객체의 타겟값을 이용해 데이터 조회에 대한 응답을 리턴한다. (JPA에서 지연로딩을 적용하면 프록시 객체가 생성된다...
순차 & 병렬 & 병행 처리의 차이점 순차 처리 ( Sequential ) 여러 작업을 순서대로 하나씩 처리 병렬 처리 ( Parallel ) 여러 작업을 동시에 처리 병행 처리 ( Concurrent ) 한 개의 업무를 어떠한 순서로 처리하든 상관없는 여러 개의 작업으로 분할하여 처리 ※ 멀티쓰레드 프로그램의 경우 병행 처리를 의미함 만약 CPU가 한 개라면 순차적으로, 여러개라면 병렬적으로 실행한다. CPU가 하나라면 복수의 쓰레드가 작동하고 있다 하더라도 여러 개의 작업으로 분할하여 순차적으로 실행한다. 즉, 동일한 시간 대에 실행되는 쓰레드는 오직 하나이지만, 여러 개의 쓰레드가 무작위로 번갈아가면서 실행됨으로써 결과적으로 동시에 처리되는 것처럼 보인다. ex ) 쓰레드 1 실행 -> 쓰레드 2 ..
Hashtable Hashtable 클래스를 살펴보면 메소드 전체에 synchronized 키워드가 적용되어 있는 것을 확인할 수 있다. 따라서 멀티쓰레드 환경에 적합하며, 쓰레드 세이프 하다는 특징이 있다. 하지만, 동시 작업을 실행하려할 경우 Lock을 하나씩 가지고 있기 때문에 동시 작업 시 병목 현상이 발생할 수 밖에 없다. ( 메소드에 접근하게 되면 다른 쓰레드는 Lock을 얻을 때까지 기다림 ) ※ Collection Framework가 나오기 이전부터 존재하는 클래스이기 때문에 최근에는 잘 사용하지 않는 클래스라고 한다. public class Hashtable extends Dictionary implements Map, Cloneable, java.io.Serializable { publ..
List List list = new ArrayList(); list.add("1"); list.add("2"); 초기화 시에 선언이 불가능한 경우라면 위의 방법밖에 없겠지만, 초기화 시 미리 데이터를 넣어놓는 간단한 방법도 있다. 1. Arrays.asList 고정된 크기이며, 변환 가능한 배열로 저장된다. 따라서 set을 통해 데이터를 갱신할 순 있지만 요소를 추가, 삭제 하는 것은 오류가 발생한다. ( 추가, 갱신, 삭제 모두 불가능 ) List animals = Arrays.asList("강아지", "고양이", "카피바라"); animals.set(0, "비둘기"); animals.add("푸바오"); // UnsupportedOperationException 발생! animals.remove(0..
String 문자열을 쌓을 때 String을 사용할지, StringBuilder or StringBuffer를 사용할지는 아래 포스트를 참고해서 결정하자! [Java] String, StringBuffer, StringBuilder의 차이점 List to String List를 String으로 변환하는 방법을 먼저 알아보면 내가 알기론 5가지가 존재한다! 1. forEach (확장 for문) StringBuilder str1 = new StringBuilder(); for(String str: list){ str1.append(str); } 2. for문 StringBuilder str2 = new StringBuilder(); for( int i = 0; i < list.size(); i++ ){ st..
여태 문자열을 이어붙일 때 StringBuilder 같은 건 선언하기 귀찮기도 하고 그렇게 친숙하진 않아서 String + 로 추가해왔는데 StringBuilder와 StringBuffer에 대해 알아봐야할 필요성을 느꼈다. String 불변(immutable) 자료형 ( 인스턴스 생성 시 생성자의 인자 value는 상수(final)로 선언되어있다. ) String 객체를 불변하게 설계한 이유는 캐싱, 보안, 동기화, 성능측면 이점을 얻기 위해서이다. 1. 캐싱 : String을 불변하게 함으로써 String pool에 각 리터럴 문자열의 하나만 저장하며 다시 사용하거나 캐싱에 이용가능하며 이로 인해 힙 공간을 절약할 수 있다는 장점이 있다. 2. 보안 : 예를 들어 데이터베이스 사용자 이름, 암호는 데..
UUID (Universally Unique Identifiers) 각 개체를 고유하게 식별 가능한 값 (범용 고유 식별자) 사용 방법 UUID.randomUUID().toString() 위 코드를 실행할 때마다 새로운 값들이 출력되며, 이 값을 유니크한 값으로 사용해주면 된다. QR 코드를 만들 때 유니크한 값을 ID로 주어 사용하게 되는데, 이럴 때 사용하면 중복값 체크할 필요 없이 바로 사용이 가능하다. 만약 길이가 길어서 짧게 쓰고 싶다고 substring을 주게 된다면, UUID를 사용하는 목적이 사라진다! 문자열을 잘라서 쓸 경우 중복값이 발생할 수 있고, 이 문자열 그대로가 유니크한 값이기 때문에 수정없이 그대로 사용해야 한다. 난수를 통해 랜덤값을 만들게 될 경우 중복 체크 로직은 따로 구..
QR 이란? 흑백 격자무늬 패턴으로 정보를 나타내는 매트릭스 형식의 이차원 바코드를 의미 QR코드는 주로 한국,일본,중국,영국,미국 등에서 많이 사용되며, 명칭은 덴소 웨이브의 등록 상표 'Quick Response' 에서 유래됨 특징 종래에 많이 쓰이던 바코드의 용량 제한을 극복하고 그 형식과 내용을 확장한 2차원의 바코드로 종횡의 정보를 가져서 숫자 외에 문자의 데이터를 저장할 수 있음 숫자 최대 7089자, 영문자와 숫자 최대 4296자, 이진 8비트 최대 2953바이트, 한자 1817자를 담을 수 있음 QR과 바코드의 차이점 QR 바코드 장점 종횡(2차원)으로 사진, 동영상, 지도, 명함 등 다양한 정보를 편리하게 담아낼 수 있음 인식속도, 인식률이 높음 단방향(1차원)으로 숫자나 문자 정보 저장..