일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 애자일기법
- 코드
- db
- Java
- Elasticsearch
- 애자일
- 그리디알고리즘
- 읽기쉬운코드
- 데이터베이스
- 개발자
- 코딩테스트
- 애자일프로그래밍
- 자바
- 프레임워크
- API
- Baekjoon
- database
- 스프링
- ES
- 클린코드
- 개발
- 알고리즘
- Spring
- 코딩
- cleancode
- 엘라스틱서치
- 백준
- 그리디
- framework
- JPA
- Today
- Total
목록분류 전체보기 (139)
시뻘건 개발 도전기
JPA를 사용하기 위한 설정과 동작 원리에서 언급했던가? 엔티티 매니저 팩토리는 여러 스레드가 동시에 접근해도 안전하기 때문에 서로 다른 스레드 간에 공유해서 사용이 가능 하지만 엔티티 매니저는 여러 스레드가 동시에 사용하게 되면 동시성 문제가 발생하여 스레드 간의 공유가 불가능하다. 영속성 컨텍스트 영속성 컨텍스트는 JPA를 이해하기에 가장 중요하다고 할 수 있다. 영속성 컨텍스트는 '엔티티를 영구적으로 저장하는 환경'이라고 정의되어 있으나 도통 이 말이 이해가되지 않는다. 말로 풀어서 이야기 한다면 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 데이터베이스가 아닌 어떠한 공간에 보관하고 관리하는데 이 공간이 영속성 컨텍스트다. 지금까지 살펴본 persist(member)의 메소드가 바로..
본 글은 소프트웨어 학습 태도를 읽고 참고하여 개인적인 생각과 경험을 바탕으로 작성한다. 1. 내가 걷는 속력과 방향을 인지하자. 개발은 혼자 하는 것이 아니다. 같은 팀원, 타 팀원, 그리고 관리자와 함께 진행한다. 이렇게 많은 사람들과 함께 업무를 진행하면서 각각 업무량도 다를 것이고 각자 일처리 속도와 습득속도 등 차이점이 있을 수 있다. 특히 일처리 속도에 대해서는 개발방향을 잘못 잡거나 필요한 기술 학습에 대해 잘못 접근하는 등에 이유로 인해 필요 이상으로 시간을 낭비할 수도 있다. (물론 언젠가는 도움이 될 수도 있겠지만 당장 처리해야하는 업무 관점에서 볼 때는 시간낭비) 문제 해결을 위해 방안을 몰색하고 방안을 구현하기 위해 필요한 부분들을 학습하여 내가 맞닥뜨린 문제와 일관성이 있는지 판단..
JPA를 사용하는 궁극적인 목적은 데이터베이스 관점의 테이블과 객체지향적 객체 사이에서 개발자가 해야할 일을 최소화하고 객체지향적으로 자유롭게 개발하기 위해서다. 따라서, JPA를 사용하려면 가장 먼저 객체를 매핑해야한다. - 객체 매핑 CREATE TABLE MEMBER ( ID VARCHAR(255) NOT NULL, NAME VARCHAR(255), AGE INTEGER, PRIMARY KEY (ID) ) 위 테이블은 아래와 같이 객체 매핑을 할 수 있다. @getter @setter @Entity @Table(name="MEMBER") public class Member { @id private String id; @Column(nullable = true, length = 255, unique ..
JPA(Java Persistence API)를 알기 위해서는 ORM(Object-Relational Mapping)을 알아야 한다. ORM은 객체와 관계형 데이터베이스를 맵핑해주는 녀석이다. 이전에 언급했듯이 자바의 객체와 관계형 데이터베이스간의 차이가 문제를 일으킬수 있다. 이 문제를 최소화 시키기 위해서 ORM이라고 하는 기술이 등장했다. JPA가 바로 자바 플랫폼의 ORM 표준 기술이다. JPA는 [그림 1]과 같이 동작하게 되는데, JPA가 자바 애플리케이션과 JDBC 사이에서 하는 일은 다음과 같다. 패러다임 불일치 해결 (DB 연동 시 유의할점 #2 참고) SQL query 생성 Entity 분석 (추 후에 이야기 하겠지만 여기서의 엔티티란 테이블을 객체화 시킨 것을 이야기 한다.) 우리는 ..
애플리케이션을 개발할 때 상용계 운영과 유지보수도 함게 생각하면서 개발해야 한다. 결국, 내부 로직이 복잡하면 복잡할 수록 유지보수가 어렵고 운영에도 영향을 미치기 쉬울 수 있다. 데이터베이스를 연동 할 때도 복잡해서는 안된다는 이야기이다. 이전 글에서 언급한 것 처럼 개발을 하게 된다면, 유지보수가 말도 못하게 힘들 수 있다. 그렇다고 데이터베이스 연동을 안할 수 없지 않는가. 데이터베이스는 객체지향 이야기 되는 추상화, 상속, 다형성의 개념이 없고, 구조 조차도 다르다. 즉, 객체와 RDB는 각각 지향하는 목적이 다르기 때문에 사용 방법과 표현방식에 차이가 있을 수 밖에 없다. 이 것을 패러다임 불일치 문제라고 이야기 한다. 이러한 문제때문에 객체 구조를 DB 테이블 구조에 저장하는데에 한계가 있을 ..
현대시대에는 자바로 개발되는 애플리케이션을 보면 대부분 관계형 데이터베이스를 사용하고 있다. 이 데이터베이스에서 데이터를 관리하려면 SQL을 사용해야한다. 자바 애플리케이션은 JDBC를 사용해서 DB에 접근한다. 다음 코드를 보자. 우리는 JDBC에게 SQL문을 전달하여 실행하도록 하면서 데이터를 관리한다. String sql = "SELECT NAME FROM MEMBER WHEHERE ID = ?"; ResultSet resultSet = stmt.executeQuery(sql); String name = resultSet.getString("NAME"); Member member = new Member(); member.setName(name); logger.info(member.getName())..
Spring을 쓰면서 데이터베이스에 접근할 때는 DTO는 필수조건일 것이라 생각이 든다. 나는 개인적으로 DTO를 Entity라고 생각하는 경우도 종종 있다. (그래야 이해하기 쉽기 때문...) 우리는 getter와 setter를 아주아주 자주 만들어 사용할 것이다. 굳이 spring이 아니더라도, 작은 어플리케이션 만들 때 조차 필요할 수 있다. 오죽하면 eclipse 자체에서 생성해주는 기능과 단축키까지 설정 되어 있겠는가..?ㅋㅋ 그것도 모자라서 Lombok이라고 하는 녀석은 어노테이션을 이용해서 자유롭고 편리하게 getter와 setter를 생성해서 사용할 수 있다. Lombok은 그냥 dependency를 걸어주고 바로 사용할 수 있는 녀석이 아니다. 사용 전에 필수 적으로 진행해야하는 절차가 ..
나는 나는 지금 주니어 개발자다. 신입사원으로 입사해서 열정에 불타오르던 때가 어끄제 같다. 신입이었을 때는 무조건 잘보이고 싶은 마음과 "열심히 하는 신입" 혹은 "노력하는 신입", "동료에게 민폐를 끼치지 않는 신입"으로 인정받고싶었다. 2년 4개월이 지난 지금, 나는 오로지 "일 잘하는 대리"로 인정 받고 싶다. 일을 잘 한다는 것은 굉장히 어려운 부분이다. 내가 신입으로 첫 직장에 다닐 대, 생각했던 모습과 굉장히 달랐다. 개발본부 모두가 굉장히 바쁠 시즌에 입사한 것이다. 우리 팀은 그 중에서도 가장 바빠보였고, 신입동기가 없던 나는 외로움과 긴장을 동시에 타면서 직딩의 꽃봉우리가 나기 시작했다. 누구에게 모르는 것을 물어봐야 하는데 물어볼 곳이 없었다. 바로 윗 분은 어마무시하게 예민하셨던 차..