본문 바로가기
728x90

스터디101

[Spring] Filter와 Interceptor 의미와 차이 필터(Filter)란? 필터 개념 필터는 Dispatcher Servlet에 요청이 전달되기 전/후에 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공한다. Dispatcher Servlet은 스프링 가장 앞단에 존재하는 프론트 컨트롤러(Front Controller)라고도 한다. 즉 필터는 스프링 컨테이너가 아닌 톰캣과 같은 웹 컨테이너에 의해 관리가 된다. (스프링 범위 밖에서 처리) 필터 구조 필터 메소드 필터를 추가하하기 위해서 Filter 인터페이스를 구현해야한다. (implements) 이때 3가지 메소드를 구현한다, init() doFilter() destroy() 1) init() init 메소드는 필터 객체를 초기화하고 서비스에 추가하기 위한 메소드이다. 웹 컨.. 2022. 10. 6.
[MySQL] 다중 테이블 업데이트, 여러 테이블 update 하기 MySQL에서 한 번의 쿼리로 여러 개의 테이블을 update 처리해야하는 경우가 종종 있습니다. 이때 사용하는 쿼리는 매우 간단!! UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE [ 조건문 ] 위 쿼리를 이용하여 기존 행에 새로운 값을 설정합니다. 새로운 값을 덮어씌워 이전 값을 재정의합니다. 단, 여러 테이블을 업데이트하는 구문은 ORDER BY 구문이나 LIMIT 구문과 함께 사용할 수 없습니다. JOIN을 이용하는 경우 아래와 같이 사용할 수 있습니다. UPDATE 테이블A a, 테이블B b SET a.column = value, b.column = value WHERE a.column = b.column 참고: https:.. 2022. 10. 6.
[React] SPA, CSR, SSR, SSG 알아보기 웹 개발 관련해서 프로젝트를 진행하다보면 서버 사이드 렌더링, 클라이언트 사이드 렌더링 등 SPA, CSR, SSR, SSG 와 같은 용어를 자주 마주칠 수 있습니다. 이때 SPA, SSR, SSG는 무엇을 의미하는 것일까요? 웹 개발 용어에서 꼭 알아야하는 용어로 모르고있었다면 이번에 그 의미를 알아두도록합시다! 1) SPA (Single Page Application) 단일 웹페이지로 동작하는 애플리케이션으로 기존 웹 페이지처럼 새로운 페이지를 로드하는 방식이 아닌 하나의 페이지 안에서 필요한 데이터만 가져오는 형태입니다. 즉 처음에 페이지를 가져오고 두번째 이후에는 api로 부터 필요한 데이터만 받아 화면을 업데이트하는 것입니다. React, Vue.js 등 자바스크립트 라이브러리로 구현 가능 합니.. 2022. 10. 4.
[React] React Router v6 적용 및 문법, Router 개념 React-Router 우리가 흔히 말하는 페이지 이동 기능은 리액트에서는 router를 통해 처리할 수 있습니다. 이때 라우터는 라우팅을 처리해주는 것인데요, 라우팅은 무엇일까요? 라우팅 (Rounting) 사용자가 요청한 URL에 따라 해당 URL에 맞는 페이지를 보여주는 것이라고 생각하면됩니다. 리액트 라우팅 관련 라이브러리가 많은데 react-router가 가장 많이 사용됩니다. 👉 여기서 잠깐, React는 SPA 구현에 가장 많이 사용되는데요, SPA가 무엇일까요? SPA, SSR, SSG 개념 및 정리 1) SPA (Single Page Application) 단일 웹페이지로 동작하는 애플리케이션으로 기존 웹 페이지처럼 새로운 페이지를 로드하는 방식이 아닌 하나의 페이지 안에서 필요한 데이터.. 2022. 10. 4.
[k8s] 워크로드(workload)와 파드(pod), 도커(docker) 지난 시간에 컨테이너와 쿠버네티스 관련하여 알아보았다. 👉 https://hyeri0903.tistory.com/208 이번엔 워크로드와 도커 관련해서 알아보자~! 워크로드 워크로드는 쿠버네티스에서 구동되는 애플리케이션이다. 쿠버네티스에서는 워크로드를 *pod 집합 내에서 실행한다. 쿠버네티스 공식 문서 - 워크로드 https://kubernetes.io/ko/docs/concepts/workloads/ *pod: 클러스터에서 실행 중인 컨테이너 집합 쿠버네티스는 여러가지 워크로드 리소스를 제공한다. Deployment StatefulSet DaemonSet Job 및 CronJob 그렇다면 애플리케이션이 실행되는 pod은 무엇일까? 파드(POD) 파드는 쿠버네티스의 배포 가능한 가장 작은 컴퓨팅 유닛이.. 2022. 10. 2.
[k8s] 컨테이너(Container)와 쿠버네티스(Kubernetes) 소개 컨테이너(Container) 컨테이너는 어떤 환경에서나 실행하기 위해 필요한 모든 요소를 포함하는 소프트웨어 패키지이다. 이러한 방식으로 운영체제를 가상화여 프라이빗 퍼블릭 클라우드 또는 개발자의 개인 노트북에 이르기까지 어디서나 실행가능하다. 이를 수행하기 위해 컨테이너는 운영체제(OS)의 기능을 활용하여 프로세스를 격리하고 해당 프로세스가 접근 할 수 있는 cpu, 메모리 및 디스크 양을 제어는 OS 가상화 형식을 활용한다. OS의 리소스를 논리적으로 분리하여 여러 개의 컨테이너가 공유하여 사용한다. 우리가 흔히 들어본 도커(docker)는 이러한 컨테이너를 다루는 유명한 도구 중 하나이다. 과거 배포 관리 변천사 1) 전통적인 배포 시대 초기에는 애플리케이션을 물리 서버에서 실행했다. 물리 서버 하.. 2022. 10. 2.
[JAVA] 자바 예외 처리 (Exception) 자바 프로그램 컴파일시 발견하지 못하는 에러를 Runtime error 라고 한다. 이때 발생하는 에러를 어떻게 처리할지 개발자가 예외 처리로 핸들링 할 수 있다. 예외 처리 1. try catch 구문 예외가 발생했을 때 try ~ catch ~ finally 구문으로 예외를 처리하거나 throw로 메소드를 호출한 곳으로 던질 수 있다. 한 가지 중요한 점은 자바에서 모든 예외는 Exception 이라는 클래스를 상속받는다. Exception : 컴파일 시 발생 (일반예외) RuntimeException : 프로그램 실행 시 발생 (실행예외) Exception의 상속 트리구조는 아래와 같다. 예외 처리하는 방식은 아래와 같다. try { //로직 수행 구문 }catch(Exception e){ //Ex.. 2021. 8. 20.
[Spring] @ResponseBody와 @ModelAttribute 차이점 @RequestBody @RequestBody는 클라이언트가 전송하는 Json(application/json)이나 xml 형태의 HTTP Body내용을 Java Object로 변환시켜준다 (POST / PUT). 따라서 Body가 존재하지 않는 GetMapping에 RequestBody를 사용하면 에러가 발생한다. Spring에서 관리하는 MessageConverter를 활용하여 Java 객체로 변환된다. @ModelAttribute @ModelAttribute는 클라이언트가 전송하는 multipart/form-data 형태의 요청 데이터(GET) 내용과 HTTP 쿼리 파라미터들을 Setter 메서드를 통해 1:1로 객체에 바인딩한다. 매핑시키는 파라미터의 타입이 객체의 타입과 일치하는지를 포함한 다양한.. 2021. 8. 17.
[Spring] @NotNull @NotEmpty @NotBlank 차이점 서버에서 클라이언트의 요청에 대하여 유효성을 검증해야하는 부분이 필요하다. 이때 스프링에서 @Valid 라는 어노테이션으로 검증을 수행하는데 Valid 중에서 위 세가지 어노테이션을 비교해보고자한다. 차이점 @NotNull @NotEmpty @NotBlank Null X X X 길이가 0인 값(ex: "") O X X 공백(ex: " ") O O X 위 세가지 어노테이션은 bean validation (Hibernate Validation)에서 제공하는 표준 Validationdmfh 클라이언트의 파라미터 중 null 값인지 체크하거나 공백 유무를 체크하는데 사용된다. @NotNull의 경우 Null값은 허용하지 않지만 "", " " 은 허용한다. 따라서 위 어노테이션은 정확히 구분해서 상황에 따라 적절.. 2021. 8. 17.
[Spring] 싱글톤 패턴 (Singleton pattern) 1. 싱글톤 패턴이란 (Singleton pattern) 소프트웨어 디자인 패턴에서 싱글톤 패턴을 따르는 클래스는 , 생성자가 여러 차례 호출되더라고 실제로 생성되는 객체는 1개이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. Why? 싱글톤 패턴을 왜 사용할까? 만약 DI 컨테이너가 매번 클라이언트에서 요청이 들어올때마다 각 로직을 담당하는 오브젝트를 생성한다고 가정해보자. 요청이 엄청 많은 트래픽 사이트에서는 계속 객체를 생성하게되어 메모리 낭비가 심해지고 서버가 감당하기 힘들어진다. 그래서 싱글톤 패턴을 사용한다! 2. 싱글톤 패턴 구현 2-1. DI Container AppConfig appConfig = new AppConfig(); // 호출 할 때마다 다른 객체.. 2021. 8. 17.
[Spring] Spring Container, BeanFactory 그리고 ApplicationContext 스프링에서 가장 중요한 개념인 Container, BeanFactory 그리고 ApplicationContext 에 대해서 알아보고자 한다. 스프링에서 BeanFactory 와 ApplicationContext는 IoC Container 역할을한다. Spring Container 스프링에서 DI를 이용하여 애플리케이션을 구성하는 여러 빈들의 생명주기와 애플리케이션의 서비스 실행등을 관리하며 생성된 인스턴스들에게 기능을 제공하는 것. 컨테이너에 적절한 설정만 있으면 프로그래머의 개입 없이 작성된 코드를 컨테이너가 빈을 스스로 참조한 뒤 알아서 관리한다. 스프링 컨테이너는 주로 BeanFactory와 ApplicationContext 두 가지로 다룬다. *빈(Bean) : 스프링이 제어권을 갖고 직접 생성 .. 2021. 8. 17.
[JAVA] Primitive Type 과 Wrapper Class 💡기본형과 참조형 JAVA의 변수는 기본적으로 기본형(Primitive Type)과 참조형(Reference Type)으로 나눌 수 있다. 기본형으로는 short, int, long, float, double, byte, char, boolean 으로 8가지가 있다. 1. 기본형(Primitive Type) - 모두 첫 글자가 소문자 - 산술 연산이 가능하다. - Null로 초기화 할 수 없다. 2. 참조형(Wrapper Class) - 모두 첫 글자가 대문자 - 산술 연산 불가능 - Null 사용이 가능하다. - DB와 연결시 DTO 객체에 Null이 필요한 경우 사용할 수 있다. 기본형은 변수의 값을 그대로 저장한다. 참조형은 객체의 레퍼런스를 저장한다. 참조형에는 객체가 할당되어야하는데 기본형과 달.. 2021. 8. 15.
[DB] ACID란? 데이터베이스하면 항상 따라다니는 기본 개념인 ACID에 대해 정리해본다. 트랜잭션은 DB 서버에 여러 개의 클라이언트가 동시에 액세스 하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용한다. 부정합이 발생하지 않으려면 프로세스를 병렬로 처리하지 않도록 하여 한 번에 하나의 프로세스만 처리하도록 하면 되는데, 이는 효율이 너무 떨어진다. 병렬로 처리할 수 밖에 없는 현실적인 상황으로 인해 부정합을 방지하고자 트랜잭션을 사용하는 것입니다. 자세한 내용은 https://hyeri0903.tistory.com/169?category=772718 에 정리해두었다. ACID(원자성, 일관성, 고립성, 지속성)는 데이터베이스 트랜잭션이 안전하게 수행된다는 것.. 2021. 7. 4.
[DB] 정규화 vs 반정규화(비정규화) 정규화 여러 제약조건(규칙)을 기반으로 데이터베이스를 이상현상 없이 설계하는 기법이다. 데이터의 무결성을 향상한다. 정규화에 대한 자세한 내용은 https://hyeri0903.tistory.com/175?category=772718 에 정리해 두었다 ㅎㅎ 비정규화 비정규(Denoramlizaiton)는 데이터를 중복시키거나 그룹핑함으로써 데이터 베이스의 성능을 향상시키기 위한 기법이다. 정규화된 테이블을 읽기 성능 향상을 위해 다시 합치는 방법 역정규화는 정규화된 테이블을 비정규 상태로 만들기 위한 방법 중 하나이다. - 비정규화 프로세스 데이터베이스의 완벽한 구조 설계를 포기하고 데이터의 무결성을 떨어트리는 대신 관계형 데이터베이스의 읽기 성능을 향상하기 위한 설계이다. 위와 같은 , , 3개의 테이.. 2021. 7. 4.
[Spring] PSA (Portable Service Abstraction) 란? PSA (Portable Service Abstraction) 잘 만든 인터페이스(PSA)를 가지고 나의 코드가 바뀌지 않도록 다른 기술로 간편하게 바꿀 수 있도록 확장성을 갖는 것이다. Spring은 Spring Web MVC, Spring Transaction, Spring Cache 등의 다양한 PSA를 제공한다. 1. Spring Web MVC 일반 클래스에 @Controller 애노테이션을 사용하면 요청을 매핑할 수 있는 컨트롤러 역할을 수행하는 클래스가 된다. 또한, 의존성 설정에서 코드 한 줄만 바꾸면 tomcat이 아닌 netty기반으로 실행되게 변경할 수 있다. 이러한 어노테이션과 dependency 등을 통해서 복잡한 인터페이스를 가지고 사용자가 웹 기술 스택을 편리하게 바꿀 수 있도록.. 2021. 7. 4.
[Spring] AOP(Aspect Oriented Programming)란? AOP란? AOP(Aspect Oriented Programming)는 직역하면 "관점지향 프로그래밍"이다. 한 마디로 정의하자면 AOP는 흩어진 코드를 한 곳으로 모으는 코딩 기법. 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화하겠다는 것이다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말한다. AOP를 사용하면 공통 관심 사항과 핵심 관심 사항을 분리하여 로직을 구현 할 수 있다. (공통 관심 사항을 AOP로 구현) -AOP 사용 장점 핵심 관심 사항과 공통 관심 사항 분리 가능 핵심 관심 사항을 깔끔하게 유지 가능 공통 관심 사항 로직 변경 용이 원하는 적용 대상 선택 가능 EX) AOP 등록 예시코드 - TimeTr.. 2021. 7. 4.
[Spring] IoC와 DI Spring하면 항상 나오는 개념인 IoC와 DI에 대해서 정리를해본다. IoC (Inversion Of Control) 의역하면 "제어의 역전"이라고한다. 제어의 역전이란 무엇일까? 말그대로 메서드나 객체의 생성, 호출을 개발자가하는 것이 아닌 외부에서 결정하는 것이다. 스프링에서는 스프링 컨테이너가 제어권을 갖고 적절한 시점에 필요한 객체를 생성하고 메서드를 호출한다. 아래 코드 예시를 살펴보자. 과거에는 개발자들이 필요한 생성자를 new 키워드로 객체를 직접 생성하였다. class OwnerController { private OwnerRepository repository = new OwnerRepository(); } 제어권이 스프링 컨테이너로 넘어가고 객체의 생성 및 생명주기까지 관리 할 수 .. 2021. 7. 4.
[JAVA] 객체 지향 설계 SOLID 객체지향 설계에서 자주 나오는 단어인 SOLID를 두루뭉실하게만 알고있어서 정리하려고한다. SOLID 컴퓨터 프로그래밍에서 SOLID란 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 마이클 페더스가 소개한 것이다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다. SOLID 원칙들은 소프트웨어 작업에서 프로그래머가 소스 코드가 읽기 쉽고 확장하기 쉽게 될 때까지 소프트웨어 소스 코드를 리팩터링하여 코드 냄새를 제거하기 위해 적용할 수 있는 지침이다. 이 원칙들은 애자일 소프트웨어 개발과 적응적 소프트웨어 개발의 전반적 전략의 일부다. 문자 약어 개념 S SRP (Single reponsibil.. 2021. 7. 2.
Spring vs SpringBoot Spring을 공부하면서 Spring과 SpringBoot의 차이점이 궁금했다. 우선 왜 스프링을 스프링이라할까? Spring 어원 개발자들이 스프링을 사용하게되면서 추운 "Winter"는 끝이나고 이제 "Spring"이 왔다고해서 스프링으로 이름이 붙여졌다고한다. 이렇게 Spring이라는 이름으로 프레임워크를 사용하게되었고 이후에 나온 것이 SpringBoot이다. Spring vs SpringBoot Spring과 SpringBoot의 자세한 차이점은 무엇일까? 우아한Tech의 닉 개발자분께서는 봄 vs 조금더 봄 으로 표현하신다. 스프링부트 특징은 1) 쉽게 만들고 2) 단독적이며 3) 상용화 수준의 4) 스프링 기반 애플리케이션 이라는 특징으로 단지 실행만 시키면 된다. 본격적인 차이점은 아래와 .. 2021. 6. 27.
[JAVA] 자바 오류, 에러 (Error) 종류 1. 컴파일 에러 (Compillation Error) - 컴파일 단계에서 오류 발견, 컴파일러가 에러 메시지 출력 - 에러 발생 원인 : 문법 오류 - 예) 맞춤법, 문장부호(;), 선언되지 않은 변수 사용 등 2. 런타임 에러 (Runtime Error) - 프로그램 실행 중 에러 발생 - 컴파일 때 에러나지 않고 프로그램 실행 시 에러 발생 -> 문법적 오류는 아님 - JVM에서 에러 메시지 출력 (XXXException 에러) - 예외(Exception)처리 등을 통해 에러 해결 - 예) 0으로 나누기, 무한루프, null pointer error, segmentation fault(존재하지 않는 메모리 위치에 접근, 잘못된 index 참조) - RuntimeException 종류 3. 논리 에러.. 2021. 5. 30.
728x90