분류 전체보기 (218) 썸네일형 리스트형 [JPA] 영속성 컨텍스트 JPA에서 중요한 두 가지 개념은 객체와 관계형 데이터 매핑(Object Relational Mapping) DB와 엔티티를 어떻게 매핑할 것인가에 대한 설계 영속성 컨텍스트(Persistence Context) JPA 내부 동작을 제어 Entity Manager Factory 그리고 Entity Manager 사용자의 요청이 있을 때마다 Entity Manager Factory는 새로운 Entity Manager를 생성하고, Entity Manager는 DB Connection을 사용해서 DB와 통신을 합니다. Entity Manager는 인터페이스로서 사용자가 영속성 컨텍스트에 접근하여 상호작용 할 수 있도록 하는 역할을 수행합니다. 객체를 생성하고 영속성 컨텍스트에 넣으면 해당 객체는 영속 상태로서.. [JPA] JPA 시작! 실습 환경 IntelliJ Java 11(또는 8) H2 DataBase Maven 메이븐 프로젝트 생성 후 JPA 및 H2 Database 사용을 위해 관련 의존성을 추가합니다. Hibernate EntityManager Relocation H2 Database Engine Note 만약 자바 8 버전 이상을 사용하고 있다면, 아래와 같이 JAXB API 의존성을 추가해야 합니다. JAXB는 Java Architecture For XML Bind의 약자로, marshal(Java Object를 XML 문서로 변환), unmarshal(XML 문서를 Java Object로 매핑) 작업을 수행합니다. 문제는 자바 11 버전에서는 JAXB를 내장하고 있지 않기 때문에 의존성을 추가해서 외부 라이브러리를 당겨.. OSI model 서로 다른 네트워크끼리 통신하려면 데이터 패킷을 전송하는 법, 받는 법에 대한 공통 규칙(common rules)이 필요합니다. 이 규칙을 프로토콜(Protocol) 이라고 부르는데, TCP(Transmission Control Protocol / 전송 제어 프로토콜), IP(Internet Protocol / 인터넷 프로토콜)가 가장 널리 사용되는 프로토콜 중의 하나입니다. 참고로 그 이름에서 알 수 있듯이 TCP/IP 프로토콜은 인터넷 환경에서 컴퓨터들이 서로 정보를 주고받기 위해 사용되는 프로토콜 입니다. 그리고 TCP/IP는 OSI 7 Layer 중에서 Layer 3, 4를 다루는 프로토콜입니다. OSI model OSI model은 네트워크 통신에서 하드웨어/소프트웨어 요소들이 각각 어떤 역할을.. [Java] synchronized 멀티 스레딩 환경에서 여러 프로세스/스레드가 동시에 같은 데이터에 접근할 때 타이밍이나 접근 순서에 따라 결과가 달라질 수 있는 상황을 경합 조건(race condition) 이라고 합니다. 경합 조건 상태에서 애플리케이션을 개발하면 의도하지 않은 결과 출력 또는 버그가 발생할 수 있습니다. 경합 조건을 방지하고 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 동기화(synchronization)라고 합니다. Java에서는 synchronized 키워드를 사용해서 동기화를 구현합니다. 이 키워드를 사용하면 synchronized 블럭이 생성되는데, 이는 한 번에 하나의 스레드만 허용한다는 의미를 가집니다. 먼저 경합 조건이 어떻게 발생하는지 알아봅시다. import java... [중고거래장터 - Study&Refactoring] Spring Security를 활용한 로그인 처리 Spring Security를 활용해서 로그인 기능을 구현했습니다. Spring Security는 사용자 인증 및 처리 방식에 대해서 사용자가 임의로 설정할 수 있도록 유연한 구현 환경을 제공합니다. 아래 이미지는 로그인 처리를 위해 사용자 정의 클래스를 생성해서 처리하고 있는 모습입니다. 이해를 돕기 위해 Spring Security 설정 파일을 확인해봅니다. 파일 설정 내용을 확인해보면 사용자 정의 클래스가 빈으로 등록되어 있고, 등록된 빈을 가지고 Spring Security 설정을 하는 것을 확인할 수 있습니다. security-context.xml 사용자 정의 클래스에 대한 내용은 아래 링크를 통해 확인할 수 있습니다. https://github.com/chan-gon/joonggo-market.. [중고거래장터 - Study&Refactoring] 트랜잭션 설정을 통한 데이터 무결성 확보 하나의 요청을 처리하기 위해 하나 이상의 메소드를 호출해야 하는 경우가 있습니다. 이 때 DB에서 하나 이상의 트랜잭션이 발생합니다. 예를 들어 사용자 비밀번호를 변경하는 메소드가 있습니다. @Override @Transactional public void changeUserPwd(UserVO user) { UserVO newUser = userMapper.getUserById(user.getUserId()); String encodedPwd = PasswordEncryptor.encrypt(user.getUserPwd()); UserVO changeUser = UserVO.builder() .accountId(newUser.getAccountId()) .userPwd(encodedPwd) .build(.. [중고거래장터 - Study&Refactoring] locale 변경 로컬 환경에서 구현한 서비스를 AWS 환경에 배포하고 구동했습니다. 로그인 시 아이디/비밀번호가 일치하지 않으면 다음과 같은 메시지가 출력되도록 구현했습니다. 그런데 아래와 같은 메시지가 출력되었습니다. No message found under code 'error.BadCredentials' for locale 'en_US' 아이디/비밀번호 관련 오류 발생 시 security_ko_KR.properties 파일의 error.BadCredentials의 문구가 출력되어야 합니다. .properties 이름에 있는 locale 정보(ko_KR)를 인식해서 properties 파일을 열고, 내부의 메시지를 출력합니다. 그런데 ko_KR 파일이 아닌 en_US 파일을 찾고 있습니다. 문제는 en_US 파일을 .. 폴더 구조를 출력하는 명령어 프로젝트 README 문서를 작성하다가 프로젝트 폴더 구조를 보여주고 싶었습니다. 먼저 윈도우 커맨드 창을 띄운다. 그리고 출력을 원하는 폴더 경로로 이동 후 아래 명령어를 입력합니다. cmd는 명령 프롬프트(cmd.exe)를 실행한다는 의미입니다. 그리고 //c는 뒤에 오는 문자열을 받아서 실행한다는 의미입니다. cmd //c tree 이렇게 입력하면 현재 자신이 위치한 경로 아래의 모든 폴더 경로가 출력됩니다. cmd //c tree 명령어를 입력하면 아래와 같이 출력됩니다. 뭔가 지저분해 보입니다. 좀 더 깔끔하게 출력하고 싶습니다. ▒▒src ▒▒ ▒▒▒▒main ▒▒ ▒▒ ▒▒▒▒asciidoc ▒▒ ▒▒ ▒▒ api-doc.adoc ▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒java ▒▒ ▒▒ ▒▒ ▒.. 이전 1 2 3 4 5 6 7 ··· 28 다음