본문 바로가기

전체 글382

[Java] Generic 이해 하기 - Generic이란 하이.. 언어공부를 하다보면 한번쯤은 이 Generic에 의문을 가지는데, 오늘 한번 큰 마음 먹고 정리를 해보려고한다. 우리는 다양한 방식으로 Generic을 활용해 오고 있었다. 아래 예제 코드를 보자. List lists = new ArrayList(); HashMap map = new HashMap(); 우리는 개발할 때 괄호안에 들어가는 타입을 따로 정해준다. 만약에 저 리스트나 맵이 별도의 타입을 지원해주는 용도로 각각 만들어져 있다고 생각해보자. 그건 정말 비효율적인 내용이 되지 않을까 생각한다. ArrayList를 까보면 아래의 그림처럼 되어있는데, 괄호 안에 E 가 있다. E는 보통 Element를 의미한다. 이처럼 제네릭에서는 다양한 타입들을 약속해놓고 사용하는데 그 내용은 아래와 같다.. 2021. 10. 25.
[Spring] JUnit5 생명 주기 정리 Spring으로 프로젝트를 진행하다보면 단위 코드를 테스트 해야할 일이 생긴다. 이때 대부분 JUnit 기반의 테스트를 작성하게 된다. 실제 JUnit을 이용해 테스트하는 방법은 아래의 링크를 참고하면 좋을듯하다. https://devkingdom.tistory.com/114 [Spring] JUnit을 활용한 스프링 메서드 모듈 테스트하기 하이 ...!! 여러분 !! 스프링은 TDD (Test Driven Development) 기반의 개발을 할 수 있도록 스프링 프로젝트를 만들때 알아서 테스트 환경을 세팅해준다. 우리는 거기다 코드를 작성해서 테스트를 하면된 devkingdom.tistory.com 다만 작성한 글에는 @Test로만 테스트 코드를 작성했는데, 실제로 테스트가 실행될 때 우리는 이 생명.. 2021. 10. 8.
[Spring] @Transactional 정리 하이 .. 요즘 지속적으로 JPA 에 대해 공부를 하고 있는데 JPA를 SpringBoot에서 사용하면서 습관적으로 생각하지 않고 CREATE, UPDATE, DELETE API 메서드를 만들때 @Transactional 어노테이션을 사용하였다. 그러다가 문득 @Transcational에 대해서 한번 정리를 해둬야 겠다는 생각을 했따. @Transactional 어노테이션을 통해 트랜잭션을 처리하는데 먼저 트랜잭션에 대해 구체적으로 알 필요가 있다. 트랜잭션에 대해 잘 기억이 나지 않으신 분들은 아래 링크를 참고 하자. https://devkingdom.tistory.com/270 [Database] 트랜잭션이란 뭘까? 오늘은 트랜잭션에 대해 정리를 해두려한다. 트랜잭션(Transaction)이란? 트랜.. 2021. 10. 7.
이진탐색 (Binary Search) 오늘은 이진탐색 (Binary Search) 알고리즘 에 대해 정리해 두려고 한다. 이진탐색 이란? 이진 탐색은 정렬된 배열의 가운데 값과 키값을 비교하고 비교 대상을 좌우로 줄여가면서 비교를 되풀이 하는 방법이다. 아래 그림을 보면 간단하게 이해 되지 않을까 싶다. 먼저 key 값은 6 이고, 배열은 {1,4,6,8,11,13,15} 라고 가정했다. 1. 먼저 8 (mid) 과 6 (key) 을 비교 했을 때, key 값보다 mid 값이 크기때문에 8(mid) 값보다 작은 1,4,6 대상으로 범위를 줄인다. 2. 다음은 4 (mid) 와 6 (key) 을 비교 했을 때, key 값보다 mid 값이 작기 때문에 4(mid) 값보다 큰 6 을 대상으로 범위를 줄인다. 3. 다음은 6(mid) 와 6 (mi.. 2021. 10. 3.
[Spring Cloud MSA] Eureka Server에서 랜덤 port 로 서비스 여러 서비스 띄우기 지난 포스팅에서 Eureka Server 를 이용하여 Service 여러개를 띄우는 것을 포스팅 했었다. https://devkingdom.tistory.com/282 [Spring Cloud MSA] Eureka Client Service 만들어 Eureka Server 에 올리기 저번 포스팅에서 Eureka Server를 올린 적있다. https://devkingdom.tistory.com/280 [Spring Cloud MSA] Eureka Server 구동하기 오늘은 Eureka Server를 직접 구동해보려고한다. Eureka는 MSA 에서 마이크로서비.. devkingdom.tistory.com 일단 랜덤으로 port를 띄우려면 port 번호를 0으로 입력해주면 된다. 그리고 두개의 어플리케이.. 2021. 9. 17.
다중 서버 환경에서 Session 클러스터링 하기 실무에서 서비스를 한대의 서버로 운영하는 경우는 거의 없다. 보통은 동일한 기능을 제공하는 여러대의 서버를 제공하고, 서비스의 부하를 분산 시킨다. 예를 들어 내가 Was 서버 3대를 운용한다고 가정해보자. 그런데 위의 시스템은 치명적인 문제가 있다. 바로 각서버가 세션 정보를 공유하지 못한다는 것이다. 그러다보니 로그인 서비스를 통해 Session ID 가 Was 1번 서버에 생성이 되고 저장이 되어도, 다른 서비스가 1번 was가 아닌 2번이나 3번 was로 요청이 되면 session ID가 없어 500에러를 발생시킬 것이다. 이러한 문제를 해결하기위해 우리가 서버단에서 별도로 Session 관리를 해주어야한다. 오늘은 Session을 처리할 수 있는 몇가지 방법을 소개하고자 한다. 1. Sticky.. 2021. 9. 16.
[Java] Java Exception 처리하기 자바에서 에러나 예외 클래스의 계층 구조를 그려보면 위에 그려놓은 정보와 같다. 상위에 있는 Throwable 클래스를 기준으로 하여 Error 와 Exception 으로 나눠진다. Exception 은 또 컴파일 단계에서 발생할 수 있는 Checked Exception 과 실행 환경에서 발생할 수 있는 Unchecked Exception으로 나뉘어진다. 그리고 자바 같은경우에는 실행 시점에서 Error 가 날수도 Exception 이 발생할 수 도 있다. Error 에러가 발생하면 시스템이 비정상 종료된다든지 하는 비정상 상황이 생긴다. 대표적인 에러로는 메모리가 부족해서 생기는 OOM(Out Of Memory) Error 나 스택 영역의 메모리가 지정된 점위를 넘어갈 때 발생하는 Stack Overf.. 2021. 9. 15.
[Spring Cloud MSA] Eureka Client Service 만들어 Eureka Server 에 올리기 저번 포스팅에서 Eureka Server를 올린 적있다. https://devkingdom.tistory.com/280 [Spring Cloud MSA] Eureka Server 구동하기 오늘은 Eureka Server를 직접 구동해보려고한다. Eureka는 MSA 에서 마이크로서비스들의 정보를 레지스트리에 등록할 수 있게 하고, 마이크로 서비스의 동적인 탐색과 로드밸런싱을 할 수 있게 도와주 devkingdom.tistory.com 오늘은 MSA Service를 하나 만들어 올려보려고한다. 저번에는 윈도우 환경이었는데... 오늘은 mac 환경에서 작업을 해보고자한다. 일단 프로젝트를 하나만들자. spring.start.io 에 접속해서 프로젝트를 하나 만들자. 여기서 Dependeciessms - Eu.. 2021. 9. 13.
dfs 를 이용하여 조합 구하기 오늘은 dfs를 이용한 조합 구하기를 정리해볼꺼다. 조합은 서로다른 n 개중에 r개를 선택하는 경우의 수를 의미한다. 조합을 다른식으로 표현하면 아래처럼 표현이 되는데 알고리즘을 구현할때는 아래 방법을 알고 있어야 한다. 그리고 이를 dfs를 이용해 내려가다 보면 이런 생각이 들것이다. "중복되는 것들이 생기네?" 이렇게 중복되는 값을 또 재귀로 돌리다보면 분명 성능이 좋지 않다. 이를 위해 다이나믹 프로그래밍 즉 dp를 이용하여 효과적으로 구현할 수가 있다. 아래는 구현안 예제 코드이다. import java.util.Scanner; public class Combination { static int[][] dp ; public static void main(String[] args) { Combina.. 2021. 9. 12.