본문 바로가기

👩‍💻TIL66

[소프트웨어 설계] 디자인 패턴(Design Pattern)의 개념과 종류 디자인 패턴이란 소프트웨어를 설계할 때 특정 맥락에서 자주 발생하는 고질적인 문제들이 또 발생했을 때 재사용할 할 수있는 훌륭한 해결방안을 말한다. 각기 다른 소프트웨어 모듈이나 기능을 가진 다양한 응용 소프트웨어 시스템들을 개발할 때도 서로 간에 공통되는 설계 문제가 존재하며 이를 처리하는 해결책 사이에도 공통점이 있다. 이러한 유사점을 패턴이라 한다. 패턴은 공통의 언어를 만들어주며 팀원 사이의 의사 소통을 원활하게 해주는 아주 중요한 역할을 한다. 디자인 패턴의 종류 디자인 패턴은 크게 생성(Creational), 구조(Structural), 행위(Behavioral) 3가지로 분류된다. 더보기 GoF(Gang of Four) 디자인 패턴이라고 불리며, 에리히 감마(Erich Gamma), 리차드 .. 2022. 9. 1.
암호화와 해시화의 차이/특성 비교 암호화와 해시화의 차이/특성 비교 암호화와 해시화는 통신의 안전성을 높이기 위해 사용된다는 점은 같지만 차이점과 각각의 특징이 존재한다. 💡 암호화 복호화 할 수 있다(= 원래대로 되돌릴 수 있다, 가역성 : 원래대로 되돌리는 것을 가역이라고 한다.) 암호화에는 공통키 암호화와 공개키 암호화 방식이 있다. 1️⃣ 공통키(비밀키) 암호화 : 패스워드(공통키)를 걸어 암호화 2️⃣ 공개키 암호화 : 긱각 다른 암호화 키를 준비하여 암호화하는 쪽의 키를 공개하는 방식 💡 해시화 복호화할 수 없다.(=원래대로 되돌릴 수 없다, 불가역성: 되돌릴 수 없는 것을 불가역이라고 한다.) 그래서 비밀번호과 같이 해독되면 안되는 데이터는 엄호화가 아닌 해시화하여 보호가 필요하다. 해시화되기 전 원래 상태를 유추할 수 없다.. 2022. 9. 1.
[운영체제]페이지 교체 알고리즘(Page Replacement Algorithm) [운영체제]페이지 교체 알고리즘(Page Replacement Algorithm) 💡 페이지 교체란 페이지 교체 알고리즘은 멀티프로그래밍 환경에서 다수 프로세스가 메모리 상에 공존할 때 혹은 물리메모리보다 더 큰 메모리 공간을 필요로 하는 프로세스가 실행 시 페이지 부재(페이지 폴드 / Page Fault) 를 최소화하면서 효율적으로 실행하기 위한 메커니즘이다. 페이지 부재(Page Fault)가 발생하면 요청된 페이지를 디스크에서 메모리로 읽어와야하는데, 물리적 메모리에 빈 프레임이 존재하지 않을 수 있다. 이러한 경우, 메모리에 올라와 있는 페이지 중 하나를 디스크로 쫓아내 메모리에 빈 공간을 확보하여 새로운 페이지를 메모리에 올려야 한다. 이러한 과정을 페이지 교체라고 부르며, page-out이 된.. 2022. 9. 1.
[JPA] N+1 문제 발생 원인과 해결방법 [JPA] N+1 문제 발생 원인과 해결방법 💡 원인 [JPA] 영속성 관리, 준영속 상태와 지연 로딩, N+1 문제 발생 원인 JPA를 사용하여 개발할 때, 성능상 주의해야 할 것이 N+1 문제이다. 📌 즉시 로딩과 N+1 일반적으로 제공되는 find() 메소드 등을 사용할 때는 jpa가 내부적으로 join문에 대한 쿼리를 만들어서 반환을 하기 때문에 즉시 로딩이 큰 문제가 없어 보이기도 합니다. 그러나 JPQL을 사용할 때, 문제가 발생합니다. JPA는 JPQL을 사용할 때는 글로벌 페치 전략을 참고하지 않고 오직 JPQL 만 사용하기 때문에, 즉시 로딩 / 지연 로딩 구분 없이 쿼리문만 따르게 됩니다. List classrooms = em.createQuery("select c from Classr.. 2022. 8. 31.
[JPA] 영속성 관리, 준영속 상태와 지연로딩, N+1 문제 발생 원인 [JPA] 영속성 관리, 준영속 상태와 지연 로딩, N+1 문제 발생 원인 💡 들어가면서 스프링 환경에서 JPA를 사용할때, 트랜잭션 범위의 영속성 컨텍스트 전략이 기본으로 사용된다. 이름 그대로, 트랜잭션의 범위가 영속성 컨텍스트의 생존 범위가 같다는 의미이다. 트랜잭션을 시작할때, 영속성 컨텍스트가 생성되며, 끝날 때 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 더보기 추가 그래서 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용한다. 여러 스레드에서 동시에 요청이 와서 같은 엔티티 매니저를 사용한다고 해도, 트랜잭션에 따라 접근하는 영속성 컨텍스트가 다르기 때문에 멀티 스레드 상황에서 안전하다. 스프링에서는 트랜잭션과 멀티 스레드 상황을 컨테이너가 처리해주어, 개발자.. 2022. 8. 31.
[Spring Batch] 스프링배치 개념/핵심기능/파티셔닝 분할 방식 [Spring Batch] 스프링배치 개념/핵심기능/파티셔닝 분할 방식 A라는 곳에 쌓여있는 데이터를 읽어와 B라는 곳로 옮기는 일련의 작업 💡스프링 배치란? Spring Batch는 일괄 처리에 주로 사용되는 spring 기반 프레임워크 중 하나이다. 스프링배치에서 제공하는 핵심 기능은 크게 다음과 같다. 📌 데이터베이스, 파일 또는 큐에서 데이터 읽기(Reader) 📌 데이터를 사용자가 정의한 방식으로 처리(Processor) 📌 처리된 데이터를 쓰기(Writer) 스프링 배치는 위와 같은 방식으로 사용자와의 상호작용 없이 반복적으로 데이터를 트랜잭션 단위로 처리할 수 있도록 구현되어 있고, 개발자는 데이터 처리에 대한 비즈니스 로직에만 집중하여 배치 프로세스를 작성할 수 있다. DB-> DB , D.. 2021. 8. 23.
[ORA-12953]The request exceeds the maximum allowed database size of 11 GB [ORA-12953]The request exceeds the maximum allowed database size of 11 GB 📌오라클 11g express 버전 용량 제한 에러 express 버전 라이센스의 경우, 개발, 프로토타임, 내부 데이터 처리, 교육 등을 위한 목적으로만 무료로 이용이 가능하다. 사용용도 외에 환경 상의 제약도 아래와 같이 있다. Any use of the Oracle Database Express Edition is subject to the following limitations; Express Edition is limited to a single instance on any server; (단일 인스턴스로 제한된다) Express Edition may be inst.. 2021. 8. 23.
[ORA-01691] unable to extend lob segment by 1024 in tablespace SYSTEM 해당 이슈는 오라클 테이블스페이스에 여유공간이 없어서 발생하는 이슈 -> 테이블 스페이스 공간 늘려주는 것이 필요하다! 1️⃣먼저, 테이블 스페이스에 남은 용량은 확인한다. select substr(a.tablespace_name,1,30) tablespace, round(sum(a.total1)/1024/1024,1) "TotalMB", round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1) "UsedMB", round(sum(a.sum1)/1024/1024,1) "FreeMB", round((round(sum(a.total1)/1024/1024,1)-round(sum(a.sum1)/1024/1024,1))/round(sum(a.total1)/.. 2021. 8. 23.
[WebFlux] Mono와 Flux 개념과 구현 [WebFlux] Mono와 Flux 개념과 구현 💡 WebFlux란? Spring WebFlux는 Spring 5에서 새롭게 추가된 모듈이다. WebFlux는 클라이언트, 서버에서 reactive 스타일의 어플리케이션 개발을 도와주는 모듈이며, reactive-stack web framework이며 non-blocking에 reactive stream을 지원합니다. 👉🏻 WebFlux의 개념 / Spring MVC와 간단비교 더 알아보기 💡 Mono와 Flux Spring Webflux에서 사용하는 reactive library가 Reactor이고 Reactor가 Reactive Streams의 구현체이다. 그래서 Webflux 문서에 Reactive Streams가 언급되는 것이고 그거와 같이 Rea.. 2021. 5. 9.
[DB] JPA와 mapper 방식 비교 및 장단점 [DB] JPA와 mybatis, mapper 방식 비교 및 장단점 갈수록 JPA를 사용하는 곳이 늘어나고 있다. 최근에 진행한 프로젝트에서 jpa로 진행하는 경우가 많았는데, 사용할 수록 두 가지의 장단점이 뚜렷하여 mybatis를 사용한 mapper 방식과 여러가지로 비교가 될 수 밖에 없었다. 간단히 정리해보자면, 다음과 같다. 장점 💡 관리 및 유지보수가 쉽다 : SQL 쿼리문을 직접적으로 작성하지 않고 객체를 바탕으로 데이터베이스를 동작시키므로 유지보수가 간결하다. 쿼리가 수정되면 그를 담을 DTO 필드에 모두 변경이 일어나야하지만 JPA는 엔티티 클래스 정보만 변경하면 쉽게 관리가 가능하다. 💡 생산성 향상 : 기존에는 개발자가 CRUD용 쿼리를 하나하나 작성해야 하며, DB에서 컬럼이 추가되.. 2021. 5. 8.