본문 바로가기
반응형

분류 전체보기203

[기초개념] 객체지향 5대원칙 객체지향 5대원칙 (SOLID) SRP (단일책임 원칙) OCP (개방-폐쇄 원칙) LSP (리스코프 치환 원칙) DIP (의존 역전 원칙) ISP (인터페이스 분리 원칙) SRP 작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 하나의 기능을 수행하는데 집중되어 있어야한다. 기능이 많아지면 결합이 발생할 가능성이 높아지며 유지보수 비용이 증가한다. 그렇기때문에 책임을 분리시킬 필요가 있다. OCP 기존의 코드를 변경하지 않고 기능을 수정하거나 추가할 수 있도록 설계해야 한다. 변경될 수 있는것이 무엇인가에 초점을 맞춰야 한다. 변경이 일어날 수 있는 내용은 수정하기 쉽게 설계하고 변경되지 않아야 하는 것은 수정되는 내용에 영향을 받지 않게 설계해야 한다. LSP 자식클래스는 부모클래.. 2020. 2. 22.
[javascript] Required List parameter 'parameter' is not present Exception 필자는 위에서 보이는바와 같이 ajax를 통해 array타입의 변수를 파라미터로 넘겨주었다. 컨트롤러에서는 List형식으로 받으려고 했다. 필자의 생각대로라면 array로 보냈으니 List로 받을 수 있어야했다. 그러나 필자의 예상과는 달리 위의 오류가 뜨면서 null값이 들어간다. (require = false로 설정시 Controller안까지는 감) 해결방법은 간단하다 @RequestParam(value="") 안의 deleteList를 deleteList[]로 바꿔주기만 하면된다. 배열타입이다보니 []을 붙여줘야하는것같다. 정상적으로 값이 들어오는것을 확인할 수 있다. 2020. 2. 22.
[Spring Boot] maven spring boot configuration annotation processor not found in classpath IntelliJ에서 @Configuration 어노테이션을 사용할때 maven spring boot configuration annotation processor not found in classpath 이러한 오류가 뜬다면 pom.xml 에 위와같은 dependency 추가후 Reimport 하시면 해결됩니다. 2020. 2. 20.
[기초개념] stateful vs stateless stateless http와 같이 이전의 상태를 기록하지 않는 접속 입력값이 같을때 항상 같은값 보장 로드밸런싱, 스케일 아웃에 용이 매 요청시 상태정보를 전달하기때문에 비용이 더 들며 서버에서도 정보를 사전처리하기 위한 작업이 필요 stateful 상태를 기억하고 있는 것 서버의 무리가 가며 스케일 아웃에 어려움이 있다. 2020. 2. 19.
[기초지식]JVM 구조와 자바 런타임 메모리구조 (+Garbage Collector) JVM이란 ? - 자바 가상머신으로 자바 바이트 코드를 실행할 수 있는 주체 자바 코드를 컴파일해서 얻은 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할 - Class Loader, Execution Engine,Garbage Collector, Runtime Data Area 1. Class Loader - 자바에서 소스를 작성하면 .java파일이 생성된다. .java 소스를 자바컴파일러가 컴파일하면 .class파일이 생성된다 이렇게 생성된 클래스파일들을 엮어서 JVM이 운영체제로부터 할당받은 Runtime Data Area로 적재하는 역할 자바 애플리케이션이 실행중일때 수행된다. 2. Execution Engine - Class Loader에 의해 메모리에 적재된 클래스.. 2020. 2. 17.
[JPA] No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call 삭제를 수행하다보면 위와같은 오류가뜨면서 삭제가 되지않는다. 해결법 : 삭제를 수행할 메소드 위에 @Transactional 어노테이션을 붙여준다. 2020. 2. 17.
[인프런] 스프링 시큐리티 [백기선님] 강의 제목 : 스프링 시큐리티 (백기선님) 강의를 듣는 목적 Security 사용방법 Security 동작방식 후기 갑자기 회사의 프로젝트의 분석을 맡게되었습니다. 로그인부분에 시큐리티를 적용해놓았고 예제를 검색해보아도 비슷한구조가 보이지 않았습니다. 대략적으로 어찌어찌 분석은 완료했지만 이게 제대로 이해한것이 맞는것인지 몰랐습니다. 어디서 어떻게되고는 알았지만 왜 그렇게 되는지는 몰랐기때문입니다. 그것을 알기위해 검색하다가 인프런에 백기선님 강의가 있다는 사실을 알게되었고 때마침 20%쿠폰이 있었습니다. 결제를 하게되었고 보게되었습니다. 제가 궁금한것은 초반에 모두 해결할 수 있게되었습니다. 동작방식부터 사용방법까지 알게되었으며 나아가 각각의 필터의 역할을 이해할 수 있게 되었습니다. 시큐리티 입문이나.. 2020. 2. 16.
[자료구조] 해쉬(Hash)란? 해쉬(Hash) 란? - 데이터를 다루는 기법중에 하나로 검색과 저장이 아주 빠르다. - 데이터를 검색할 때 사용할 key와 실제 데이터의 값이 (value가) 한 쌍으로 존재 - key값이 배열의 인덱스로 변환되기 때문에 검색과 저장의 평균적인 시간 복잡도가 O(1)이 된다. 해시 함수 - 임의의 길이의 데이터를 입력받아 일정한 길이의 비트열로 반환 시켜주는 함수 - 결과로는 해쉬코드가 나온다. - 동일한 값이 입력되면 언제나 동일한 출력값을 보장한다. 좋은 해쉬함수 - 충돌을 최소하하는 방향으로 설계 - 키의 일부분보다는 전체를 참조하여 키 생성 충돌이란 ? - 해시함수를 통해서 결정된 key가 중복되는경우 충돌해결 Open Address 방식 - 충돌이 발생하면 다른 해시버킷에 데이터를 삽입하는 방.. 2020. 2. 15.
[Spring Boot Security] Custom Logout Form 구현시 바로 로그아웃되는 현상 Spring Boot Security(이하 시큐리티) 에서는 Login View를 Custom 하게 된다면 아래 두개의 Filter가 사라진다. 그렇기 때문에 Logout을 따로 처리를 해줘야한다 SecurityConfig File이다. 보는것과 같이 loginPage를 /login이라고 명시해주었다. 그렇기때문에 위의 설명과 같이 Filter 2개가 제거된다. 위와같이 설정해주고 localhost:/logout 으로 들어가면 logout Form이 뜰거라 생각했지만 그렇지 않았다. 바로 logout처리가 되었다. 필자의 추측으로는 logout이라는 요청이 들어오면 어떠한 filter에서 가로채서 처리를 하는것같다. (이 글을보시는 분중에 어떠한 filter인지 아시는분은 알려주시면 정말 감사하겠습니다).. 2020. 2. 13.
[Spring boot] Qdomain 재생성 후 실행이 안되는 오류 정확히 무슨문제인지는 모르나 ddl-auto : update를 create로 한번 실행 시켜주면 정상적으로 동작한다. Qdmain이 바뀌어서 매칭되는게 없어서 나는 오류가 아닐까.... 조심스레 추측해보지만 혹시라도 아시는분 계시면 댓글로 부탁드리겠습니다. 2020. 2. 11.
[Spring Boot] 도메인 수정후 compileQuerydsl 실행시 Attempt to recreate a file for type 오류 도메인 수정후 compileQuerydsl 실행시 Attempt to recreate a file for type 오류가 날 경우가 있을것이다. 그런 경우에 querydsl을 실행해서 나타난 폴더를 삭제해주고 다시 실행하면 정상적으로 동작할것이다. 일반적으로 src/main.generated 경로를 많이쓴다. 2020. 2. 11.
[자료구조] 힙(Heap)이란 ? 힙(Heap)이란 ? 완전이진트리의 일종 완전이진트리와는 다르게 중복값을 허용한다. 최댓값이나 최솟값을 빠르게 찾아내기 위해 만들어진 자료구조 힙(Heap)의 종류 최대힙 : 루트의 값이 가장 큰 힙 최소힙 : 루트의 값이 가장 작은 힙 힙(Heap)의 사용사례 우선순위 큐 힙(Heap)의 구현 구현에는 보통 배열을 이용한다. 일반적으로 편하게 사용하기 위해서 0번째 인덱스는 비워둔다. 왼쪽자식의 인덱스 : 부모의 인덱스*2 오른쪽자식의 인덱스 : (부모의 인덱스*2) +1 부모의 인덱스 : 자식의 인덱스/2 public class MaxHeap { public static void main(String[] args) throws IOException{ BufferedReader reader = new .. 2020. 2. 11.