fee-fi-fo-fum
article thumbnail
패턴
카테고리 없음 2024. 4. 8. 20:39

전략 패턴 ( Strategy Pattern ) 객체들이 할 수 있는 행위 각각에 대해 전략 클래스를 생성하고, 유사한 행위들을 캡슐화 하는 인터페이스를 정의하여, 객체의 행위를 동적으로 바꾸고 싶은 경우 직접 행위를 수정하지 않고 전략을 바꿔주기만 함으로써 행위를 유연하게 확장하는 방법을 말합니다. 간단히 말해서 객체가 할 수 있는 행위들 각각을 전략으로 만들어 놓고, 동적으로 행위의 수정이 필요한 경우 전략을 바꾸는 것만으로 행위의 수정이 가능하도록 만든 패턴입니다. 1. 전략 패턴 사용 이유 예를 들어, 기차( Train )와 버스( Bus ) 클래스가 있고, 이 두 클래스는 Movable 인터페이스를 구현했다고 가정하겠습니다. 그리고 Train과 Bus 객체를 사용하는 Client도 있습니다. 이..

article thumbnail
SELECT 쿼리문 실행 순서
카테고리 없음 2024. 3. 18. 00:14

SELECT 쿼리문은 FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 총 6단계를 거친다. 아래는 각 단계의 동작을 정리한 것이다. FROM 절 (+ Join) 쿼리의 첫번째 실행 순서는 FROM절이다. FROM 절에서는 조회할 테이블을 지정합니다. 이후 Join을 실행하여 하나의 가상 테이블로 결합합니다. WHERE 절 WHERE 절에서는 테이블에서 조건에 맞는 데이터를 필터링한다. GROUP BY GROUP BY 절에서는 선택한 칼럼을 기준으로 조회한 레코드 목록을 그룹핑한다. HAVING 절 HAVING 절은 그룹핑 후에 각 그룹에 사용되는 조건 절이다. 쉽게 말해 그룹을 필터링한다고 생각하면 된다. HAVING 절의 조건을 WHERE 절에도 사용할 수 있는 경..

[자료구조 입문] 05. 재귀 알고리즘
Algorithm🥇 2024. 1. 8. 16:24

재귀 (recursive) 팩토리얼 구하기 package 자료구조입문.재귀; public class Factorial { static int facto(int x) { //재귀로 구현 if(x > 1) { return x * facto(x-1); } return 1; } static int facto2(int x) { // 삼항연산자 + 재귀 구현 return (x > 1) ? x * facto(x-1) : 1; } public static void main(String[] args) { System.out.println(facto2(5)); } } 직접재귀와 간접재귀 직접재귀 : A - A - A 형태로 자신과 동일한 메서드를 호출하는것 간접재귀 : A - B - C 형태로 메서드 A 가 B를 호출, ..

equals(), equalsIgnoreCase() - 자바 문자열 비교
Java🔥 2023. 12. 27. 19:23

문자열 비교는 String 클래스에서 제공해주는 equals(), equalsIgnoreCase() 메소드를 사용하는 방법이 있다. 실제 문자열을 비교하여 기본 자료형과 참조형의 비교에서도 같다는 결과를 제대로 반환해준다. 등위 연산자( == ) 를 통해서 비교하게 된다면, 실제의 문자열이 아닌 문자열의 주소를 비교하여 값을 표출한다. equals() : 대소문자를 구분하여 비교 equalsIgnoreCase() : 대소문자를 구분하지 않고 비교 원하는 비교형태를 파악하여 선택하고 사용해야한다.

article thumbnail
Ubuntu Redis 사용방법
Tip!✨ 2023. 12. 27. 17:57

먼저 apt-get을 업데이트 해준다. $ sudo apt-get update $ sudo apt-get upgrade 아래의 명령어로 설치한다. $ sudo apt-get install redis-server 설치가 완료되면 버전을 확인해보자 $ redis-server --version 이제 redis.conf 파일을 열어서 Redis가 사용할 수 있는 최대 사용 메모리양을 정하고 최대 사용 메모리를 초과하게 될때 데이터를 어떻게 삭제할지를 정의할 것이다. sudo nano /etc/redis/redis.conf 설정 파일에서 maxmemory와 maxmemory-policy를 찾아서 다음과 같이 바꾼다. 최대 사용 메모리양은 1G로 정하고, 최대 사용 메모리를 초과할 시 가장 오래된 데이터를 지워서 ..

JWT weekKey error
Error Logs🐾 2023. 12. 26. 17:00

JWT Secret Key의 보안이 약하다는 에러이다. 키의 길이를 늘려주니까 정상동작하였다. 시크릿키의 경우에는 최소 512bits 이상으로 설정하는 것을 권장한다. [참고 자료1] [참고 자료2]

도커 + Redis 연동 에러
Error Logs🐾 2023. 12. 26. 16:51

도커와 레디스를 연동하는데 에러가 발생했다. 내가 작성하려고 했던 구조는 아래와 같다. Docker 내부에서 Spring이 실행되고있고, AWS EC2 Host 서버에서 Redis를 돌리는 상태이다. 문제는 Spring 내부의 코드에서 발생하고 있었다. 문제 V1 일단 기존 코드에서는 아래와 같이 application.yml을 3가지 버전으로 나눠서 사용하고 있었다. dev는 로컬에서 동작하는 H2, Redis는 localhost에서 동작하도록 작성이 되어있었다. 이것저것 문제점을 찾다보니 application-prod 에 적용되어있는 해당 부분이 정상적으로 읽히고 있지않았다. 그래서 에러가 발생하는것. REDIS_HOST에 host의 IP를 입력해도 동작을 시켜놓으면 localhost:6379로 실행되..

독서 메모 방법
Books📖 2023. 12. 26. 01:41

지식을 내것으로 만드는 메모방법 1. 많이 적지 말아야한다. 2. 핵심 키워드를 내방식으로 찾아내라. - 한개의 장을 읽을때, 메모를 반쪽이상 할 필요없다. 책의 맥락 읽기 메모법 1. 두페이지 정도를 읽고 책에서 눈을 떼자. 2. 핵심 키워드를 떠올려보자. 3. 책을 보지 않고 메모를 진행. - 중간에 메모를 하고 싶어도 참는 용기. - 순간의 생각. 책을 읽다가 고민을 하고 떠올리는것 - 생각의 이음. 순간의 생각으로 떠올린 핵심키워드를 연결하여 전체적인 맥락을 읽는것 메모를 잘하는 사람은 책을 읽어가며 메모를 하지않는다. 만능노트(한권의 노트) - 내가 떠오르는 생각들을 전체적으로 메모한다. 이렇게 만능노트에 적힌 메모들을 독서/업무/대화/지식 등의 종류별로 나눠서 정리한다. 꾸준히 메모하기 위한 ..

InvalidDataAccessApi UsageException 에러 발생
Error Logs🐾 2023. 12. 17. 19:23

2023-12-17 18:10:33.956 ERROR 11520 --- [nio-8080-exec-1] t.s.g.e.e.RestControllerAdvice : Unknown error org.springframework.dao.InvalidDataAccessApiUsageException happened: No EntityManager with actual transaction available for current thread - cannot reliably process 'remove' call; nested exception is javax.persistence.TransactionRequiredException: No EntityManager with actual transaction avai..

article thumbnail
[Spring] 특정 오류 메세지 표시 ? (물음표)로 깨져서 표시되는 에러
Error Logs🐾 2023. 12. 11. 18:49

문제점 스프링 컨트롤러에서 특정 오류를 실행할때 오류메세지가 물음표로 표출된다. 다른 컨트롤러에서는 정상적으로 표시되는데 여기서만 이렇게 표시된다. 해결 방법 에러로그를 확인해보니 org.springframework.security.authentication.InternalAuthenticationServiceException: 없거나, 찾을 수 없는 회원 입니다. 위와 같은 예외가 발생하였는데, 이러한 예외는 사용자 인증과정에서 예외가 발생할때 표출된다. @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException{ Member member = memberRepository.findByEm..

profile on loading

Loading...