728x90
반응형

Java 79

변수

여기서 나오는 모든 예제는 깃허브에 있다. 📌 변수 변수는 값을 저장하는 공간이다. 📌 변수란? 프로그래밍에서의 변수란, 값을 저장할 수 있는 메모리상의 공간이라고 한다. 이 공간에 저장된 값은 변할 수 있기 때문에, 변수라고 이름이 붙여졌다. 변수란, 단 하나의 값을 저장할 수 있는 메모리 공간 그렇기 때문에, 새로운 값을 저장하면 기존의 값은 날아가게 된다. 📌 변수의 선언과 초기화 📌 변수의 선언 변수의 선언 방법은 public class Class { int age; // age라는 이름의 변수 선언 // int : 변수 타입 // age : 변수 이름 } 변수 타입은 변수에 저장될 값이 어떤 타입인지를 지정해주는 것이다. 변수 이름 변수의 이름이다. 이 변수 이름 은 메모리 공간에 이름을 붙여주..

Java 2022.08.07

상태 패턴 적용

스테이트 패턴 적용기 모든 코드는 깃허브에 있음을 알린다. 현재 패스트캠퍼스의 디자인 패턴 강의를 수강도 하고있고, 동시에 디자인 패턴에 대한 책도 한권 읽었었다. 그러니까 메인 메소드만 있는곳에서 디자인패턴을 적용하여 연습을 조금 했었다. 그리고 프로젝트에 도입을 했었는데 약간 2% 부족한 패턴이 탄생했었다. 지금에서의 완벽한 디자인패턴 프로젝트를 통해서 유저 포인트를 조건에 따라 변경해주는 로직이 있었다. 자... 예전의 나는 보잘 것 없었다. ㅋㅋㅋㅋ 이게 그때 당시의 나에겐 최선이었을지도?? 아무튼 각설하고 저 로직을 이제 바꿔보려고 한다. 해당로직의 bean이라는 객체는 단지 저 포인트와 해당 유저의 아이디만 가지고 있는 일종의 DTO이고, 네이밍마저 가독성을 해쳤다. 이제부터 리팩토링 과정을 ..

Java 2022.08.07

프로젝트 리팩토링

Querydsl 지금 현재 리팩토링을 진행중인 프로젝트가 있는데, 내가 스터디를 했던 JPA를 적용시켜 Mybatis에서 JPA로 이전작업을 하는 중에 생각했던것 보다 QueryDSL을 더 많이 사용하는 것 같다. 많은 분들이 올리신 JPA와 같이 쓰는 QueryDSL은 별도의 support클래스를 만들어서 할당하는 방식으로 사용했다. 나는 그런데 조금 다르게 설정을 했다. 커스텀 인터페이스 구성 공식문서의 4.6.1챕터 에서 보면 Querydsl을 같이 사용하려면 해당 엔티티 Repository인터페이스에 다중상속으로 RepositorySupport 인터페이스를 상속해주고 RepositorySupportImpl에서 Support 인터페이스를 구현해주었다. 이렇게 말이다. @Repository publi..

Java 2022.08.07

Jasypt

비교적 오랜만에 글을 업로드 하는 것 같다. 사이드 프로젝트와 여러가지 업무에 매진해서 블로그 포스팅할 새도 없이 쭉 지나갔다. 모든 코드는 깃허브에 있다. 이번 포스팅에서는 Encyption 즉, 암호화에 대해서 다뤄보겠습니다. 서론 우선 현재 저희가 쓰고있는 암호화에는 각종 Open Api 클라이언트 ID와 비밀번호에 대해 암호화를 적용하였습니다. 예시로 하나의 암호화된 아이디와 패스워드를 가져왔습니다. Github 또는 그 외의 공개 장소에 프로젝트 관리를 하다보면 DB 패스워드 등 보안에 민감한 정보들이 노출되기 쉽습니다. 그렇기 때문에 이런 민감한 정보들은 암호화를 해주어야 합니다. 그냥 명시적으로 적어두게 되면 누군가가 이 아이디와 암호를 보고 같이 사용할 수 있기 때문입니다. Jasypt 라..

Spring 2022.08.07

고급 주제와 성능 최적화 1

스터디도 시작한지 3개월이 되었다. 시간 참빠른것 같다. 진도가 이제 15장을 둘로 쪼개고 16장 해도 9월에는 종료가 될것이다. 😂 예외처리와 엔티티 그리고 프록시에 대해 정리한다. 예외 처리 {: text-center} JPA는 그림과 같이 javax.persistence.PersistenceException의 자식 클래스이다. 그리고 이 예외 클래스는 RuntimeException의 자식이다. JPA 예외는 모두 uncheck Exception이다. JPA 표준예외 트랜잭션 롤백을 표시하는 예외 트랜잭션 롤백을 표시하지 않는 예외 서비스 계층에서 데이터 접근 계층의 구현 기술에 직접 의존하는 것은 좋지 않다. SOLID원칙 생각해보자. 이것이 예외에서도 마찬가지가 된다. 서비스에서 JPA의 예외를 ..

JPA 2022.08.06

컬렉션과 부가기능

코드는 모두 깃허브에 있음. 일단 자바의 컬렉션 인터페이스들의 특징부터 나열한다. 컬렉션 Collection 자바가 제공하는 최상위 컬렉현, Hibernate는 중복을 허용하고, 순서를 보장하지 않는다고 가정 Set 중복을 허용하지 않고, 순서도 보장하지 않는다. List 순서가 있는 컬렉션아며 중복을 허용한다. Map Key, Value 구조로 되어있는 컬렉션이다. JPA와 Collection Hibernate는 엔티티를 영속 상태로 만들 때 컬렉션 필드를 Hibernate가 준비한 컬렉션으로 감싸서 사용한다. 다음 예시를 보자 @Entity public class Team { @Id @GeneratedValue private Long id; @OneToMany private Collection mem..

JPA 2022.08.06

SOLID 원칙

📌 SOLID 원칙 객체 지향적으로 설계하는데에 있어 기본이 되는 SOLID원칙에 대해서 알아보자. SOLID는 각 원칙의 첫번째 글자를 따서 만든 것이다. 단일 책임 원칙 (Single responsibility principle; SRP) 개방-폐쇄 원칙 (Open-closed principle; OCP) 리스코프 치환 원칙 (Liskov substitution principle; LSP) 인터페이스 분리 원칙 (Interface segregation principle; ISP) 의존 역전 원칙 (Dependency inversion principle; DIP) 이 원칙들이 서로 다른 내용이라 하기에는 밀접하게 연관되어 있으므로 한꺼번에 같이 이해해야 할 것이다. 📌 단일 책임 원칙 객체 지향은 책임..

Java 2022.08.06

준영속 상태의 지연로딩을 해결하는 방법

준영속 상태의 지연로딩을 해결하는 방법 JPA에서 항상 생각을 해야되는 것이 바로 영속상태, 영속성 컨텍스트위에 있는가? 를 생각해야된다. 예를 들어 우리는 DAO층에서 실제 DB와 통신을 보편적으로 진행하는데, 이쪽은 영속성 컨텍스트에 의해 관리가 되어 영속 상태를 유지한다. 하지만, Controller, View 이런 계층에서는 준영속 상태가 된다. 그래서 영속상태와 다르게 변경감지, 지연로딩이 동작하지 않게 된다. 지연로딩이 동작하지 않기 때문에 이때 지연 로딩을 시도하면 문제가 발생하는게 당연하다. 하이버네이트가 구현체라면 org.hibernate.LazyInitializationException이 발생한다. 이것을 해결하는 문제는 두가지가 있다. 뷰가 필요한 엔티티를 미리 로딩 OSIV를 사용해..

JPA 2022.08.06

Spring -> Spring Boot 마이그레이션 2

삽질기 모든 코드는 깃허브에 있다. 일단 저번에 마이그레이션 1탄을 했었는데 의존성이 겹쳐서 다시 리팩토링 하려고 보니까 에러가 많았다. 의존성 겹침 에러 일단 의존성이 겹쳐서 생긴 에러가 조금 있다. 부분만 적은 gradle 일부이다. plugins { id 'org.springframework.boot' version '2.5.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } dependencies { implementation ( 'org.springframework.boot:spring-boot-starter-web', //이부분 'org.spring..

Spring 2022.08.06

연산자

연산자, 조건문 정리 산술 연산자 비트 연산자 관계 연산자 논리 연산자 instanceof assignment(=) operator 화살표(->) 연산자 3항 연산자 연산자 우선 순위 (optional) Java 13. switch 연산자 산술 연산자(Arithmetic Operator) 산술 연산자는 사칙연산을 다루는 연산자로, 가장 기본적이면서 가장 많이 사용되는 연산자 중의 하나. 산술 연산자는 모두 두 개의 피연산자를 가지는 이항 연산자이며, 결합 방향은 왼쪽에서 오른쪽이다. 연산자 설명 + 더하기 연산 수행(문자열 연결 가능) - 마이너스 연산 수행 * 곱하기 연산 수행 / 나누기 연산 수행(정수형은 몫 연산자) % 나머지 연산 수행 int result = 1 + 2; System.out.pri..

Java 2022.08.06
728x90
반응형