전체 글 64

Load Balancing : ELB를 해보자!

Load Balancing이란 무엇일까? 주로 라운드 로빈 전략을 사용하기는 하지만, 들어오는 트래픽을 분산시켜서 서버의 과중화를 막는 방법이라고 볼 수 있다. 실제로 AWS에서는 Elastic load Balancer를 사용해서 트래픽을 분산시키는 방법을 사용한다. 이것을 사용하는 이유는 아무래도 scale-up -> scale-out 방식으로 진화하는 현 시대에 맞춰서 발전하고 있기 때문이다. scale-out은 서버의 스펙을 높이는 방법 보다는 서버를 여러개 두는 방식으로 트래픽을 처리하여 비용적, 혹은 설치에 드는 어려움을 해결하겠다는 마인드에서 출범한 것으로 볼 수 있다. --- 계속...

AWS 2023.10.16

내가 왜 개발을 하려고 했나?

사실 왜 개발을 하려고 했는지는 여러 이유가 있지만 명확하지 않았다. 여러가지 총체적인 합으로 인해서 나타났다고 하기에는 참 부족했다. 심리학은 무엇인가? 나는 솔직히 다른 사람과 다른 정의를 내고 싶다. 1학년때 들었던 강의가 아직도 생각난다. "무형의 것 → 유형의 것" 으로 바꾼다는 것이 중요했다. 감정, 사고, 생각이라는 것은 실제로 무형의 것이고, 이것을 유형의 것으로 나타내는 것이 중요하다. 이러한 것들을 통해서 사람들의 사고를 정의하고, 진단이라는 것까지 나타낼 수 있게 된다. 예를 들어 BDI 점수가 몇점 이상이면 심각한 우울 상태... 이런식으로 조작적 정의라는 것이 중요했다는 것이다. 생각과 사고, 그리고 감정이라는 것은 모두가 동일하게 알고 있지만 그것을 어떤 기준에서 그렇다고 말하는..

일기/일상 2023.10.14

AOP에 대해서 알아보자

AOP 스프링의 장점을 보면 AOP이라는 것이 꼭 나온다. 이는 관점 지향 프로그래밍으로서, 횡단 관심사의 분리를 허용함으로 모듈성을 증가시키는 것이 목적이 프로그래밍 패러다임이다. 여러 객체에서 공통으로 사용할 수 있는 기능을 분리해서 개발자는 반복 작업을 줄이고, 핵심 기능 개발에만 집중할 수 있다. 이렇게만 하면 이해하기가 쉽지 않다. 예시를 들어보자. "factorial를 구현하는 방법을 알고 싶어요!"라고 한다면 public interface Calculator { Long factorial(Long num); } public class RecursiveCalculator implements Calculator { @Override public long factorial(final Long nu..

쿠키, 세션, 토큰, 캐시

쿠키 1. Client가 들고 다니면서 직접 수정할 수 있는 것이 쿠키이다. But. Client가 마음대로 해당 값을 바꿀 수 있다는 문제점이 발생하다. 세션 2. Client가 직접 수정하게 되면 위험한 정보들을 보관한다. - VIP 정보, 구매한 목록 3. sessionId를 발급해서 쿠키에 저장시키고, 쿠키에 있는 sessionId로 서버에서 session 정보를 얻을 수 있게 된다. But. 실수로 session에 있는 값이 reset될 가능성이 있다. 토큰 4. userId, userRole 등의 정보를 기입하고, 서버의 비밀키를 통해서 암호화 할 수 있다. 5. 해당 token은 client의 쿠키 혹은 localstorage에서 보관한다. 6. Token 방식으로 구현하게 되면, 사용자가 ..

Servlet & Spring web MVC

자바 스프링을 쓰다보면 servlet, MVC와 같은 개념이 많이 나타난다. 이에 대해서 자세히 알아보자! 우선 이전의 서버와 프론트의 통신 방식은 client server 와 같은 방식으로 주고 받게 되었다. 그러니, 정적 데이터야 일괄적으로 가져올 수는 있지만 동적 데이터에 대해서는 알기가 쉽지가 않다. 그래서 나타나게 된 것이 CGI이다. CGI Common Gate Interface : 동적인 데이터를 제공하기 위한 규약이다. client web Server CGI 구현체 하지만 이 방법은 여러 문제가 있었는데, 1. CGI 구현체를 하나의 요청마다 프로세스를 하나씩 진행시켰어야 했다. 이는 굉장히 큰 리소스 낭비가 된다. 2. 같은 요청이라도 동일한 CGI객체를 만들기 때문에 재활용할 수 없다면..

Interface란?

객체화의 꽃, 인터페이스 Interface의 특징 1. 인스턴스를 생성할 수 없고, 상수만 가질 수 있다. - void.. 2. 메서드 body가 없는 추상 메서드만 가진다. - 직접 구현할 수 없다는 것이다. 3. 디폴트 메소드에서는 body를 가질 수 있다. - 그렇기 때문에 이 부분에 대해서는 반드시 override할 필요는 없다. - 하위 구현체 클래스가 간단하게 정의될 수 있게 하기 위해서 나타난 것이다. 4. 다중상속이 가능하다. (추상 클래스와는 확연히 바른 지점이다.) - 로그인과 같은 작업을 할때 필요하더라..(특히 Oauth2 객체 만들때 카카오, 구글과 같이 다양하면 쓰기 적합하다) - 다중 상속이란 한꺼번에 여러 인터페이스를 구현할 수 있게 되는 것을 의미한다. 다이아몬드 문제 - ..

Lambda 란 무엇일까?

동작 파라미터화 : 함수, 즉 동작을 파라미터화 한 것이 동작 파라미터 화이다. // 해당 학생들을 filter할 기준이 되는 predicate를 정의하는 인터페이스 public interface StudentPredicate { boolean test(Student student); } // 해당 학생들을 filter 하는 함수 public static List filterStudent(List students, StudentPredicate studentPredicate) { List filteredStudents = new ArrayList(); for (Student student : students) { if (studentPredicate.test(student)) { filteredStude..

Generic이란?

Generic이란? - 컴파일 타임에 타입을 체크함으로써 코드의 안전성을 높여주는 기능이다. List // T = 타임, 이 타임에다가 타입 매개변수를 넣을 수 있다. List stringList = new ArrayList(); 제네릭의 사용 이유 1. 컴파일 타임에 강력한 타입 검사 - string으로 제네릭을 사용할 경우 강력하게 타입을 검사할 수 있다. List stringList = new ArrayList(); stringList.add("hi everyone~"); stringList.add(1); // --> 컴파일 시 에러가 발생하지 않음 List stringList = new ArrayList(); stringList.add("hi everyone~"); stringList.add(1)..

싱글턴 패턴과 정적 클래스

싱글턴 패턴 1. 싱글턴 패턴이란 무엇인가? - 객체의 인스턴스가 오로지 한개만 생성되도록 설계하는 것. - 어플리케이션 수준에서 인스턴스가 단 한번만 생성이 되어야 한다. - 로그 기록, 캐싱, 사용자 설정 등에서 구현된다. 2. 싱글턴 패턴이 필요한 이유 - 예화 : 배경색을 담당하는 클래스가 있다고 했을 때, 배경색은 동일해야 한다. 하지만 여러 객체가 소환되어 설정이 지속적으로 바뀌게 된다면 정적인 속성을 가졌기에 오류가 뜰 가능성이 높다. 3. 싱글턴 패턴 구현 방법 public class Settings { // Settings 클래스 내부의 static 한 싱글톤 패턴을 맡을 인스턴스 // private로 구현하여 외부에서 직접 생성하지 못하게 함 private static Settings ..

Git rebase와 merge

Merge Merge란 무엇인가? - 서로 다른 작업을 하기 위한 별도의 공간을 생성할 때 브랜치를 생성할 수 있다. - 기능 구현을 위해서 해당하는 기능을 구현하기 위한 브랜치를 생성한다. - 기능 구현이 되는 경우 해당 기능을 main 브랜치에 merge한다 즉, main branch 내부에 브랜치를 본래의 브랜치로 합치는 과정을 Merge라고 한다. # 예시 과정 git checkout -b feature main // main에서 나오는 feature ... 기능 구현 git checkout main // main 브랜치로 작업 공간 변경 git merge feature // feature에 있는 변경 사항을 merge하여 가져옴 # 3-way-merge 아래에서 부터 main, docs, fea..

git/git 전략 2023.09.21