본문 바로가기

verdantjuly/Today I Learned

TIL 20240302

728x90

이번 주 목표

Spring 완강

오늘 목표

spring 1주차

spring 2주차

오늘 한 것

 

오늘 스케줄

8:00 AM Spring 공부

10:00 PM TIL 작성

11:00 PM 취침

 

0. 모의 면접 답변 보완

 

[대답한 주요 질문]

 

인덱스가 무엇인지? 

테이블의 동작 속도를 높여주는 자료구조를 말합니다. 

 

인덱스의 원리

MySQL은 B tree 자료구조를 이용하며 문자열을 쪼개어 탐색하는 방식으로 이루어집니다. 탐색 속도는 O(log N)입니다.

 

 

[대답 못한 질문]

 

SOLID와 특징에 대해서 Nest.js의 DI/IoC 등의 개념과 엮어서 설명해 주세요.

 

SOLID는 객체지향 프로그래밍의 다섯가지 기본 원칙입니다.

단일 책임 원칙, 개방 폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 관계 역전 원칙이 있습니다. 

 

SOLID 의 D인 의존관계 역전 원칙에 의하면 프로그래머는 추상화에 의존해야합니다.

DI Dependency Injection 즉 의존성 주입을 통해 하나의 객체가 다른 객체의 의존성을 제공하여 추상화를 이루는 것이 

이상적인 객체지향 프로그래밍이라고 할 수 있습니다.

 

 

[대답은 했지만 더 공부가 필요하거나 횡설수설한 질문]

 

Getter와 Setter로 가져올 수 있다면 캡슐화가 되지 않은 것이 아닌가요?

클래스 외부에서는 공개된 인터페이스만 사용할 수 있으며

내부 구현에 대한 세부 사항은 감춰지므로 캡슐화가 이루어졌다고 할 수 있습니다.

 

CI/CD 파이프라인 

master 브랜치에 push를 하게 되면 Github Actions를 통해 자동으로 빌드를 하게 되고 빌드된 파일을 압축하여 S3 버킷에 올리게 됩니다. 이때 CodeDeploy를 이용하여 사용하는 EC2에서 S3버킷에 올라온 파일을 가져오고 압축을 해제 하여 배포하고 PM2를 통해 올라온 파일을 자동으로 다시 띄웁니다. 

 

자기소개에서 거꾸로 생각한다는 정확한 의미

원점으로 돌아가 처음부터 문제를 거슬러 올라감으로서 보다 구체적으로 문제 해결을 할 수 있다는 점을 강조하고 싶었습니다.

 

 

1. 직렬화와 역직렬화 

controller에서 자바 객체를 반환하면 자동으로 json 형태로 변환해 준다.
(Jackson 라이브러리)

 

직렬화 serialize

Object를 json으로 바꾸는 과정

 

역직렬화 deserialize

json Object 바꾸는 과정

package com.sparta.springmvc;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.sparta.springmvc.response.Star;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;

public class JacksonTest {

    @Test
    @DisplayName("Object To JSON : get Method 필요")
    void test1() throws JsonProcessingException {
        Star star = new Star("Robbie", 95);

        ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper
        String json = objectMapper.writeValueAsString(star);

        System.out.println("json = " + json);
    }

    @Test
    @DisplayName("JSON To Object : 기본 생성자 & (get OR set) Method 필요")
    void test2() throws JsonProcessingException {
        String json = "{\"name\":\"Robbie\",\"age\":95}"; // JSON 타입의 String

        ObjectMapper objectMapper = new ObjectMapper(); // Jackson 라이브러리의 ObjectMapper

        Star star = objectMapper.readValue(json, Star.class);
        System.out.println("star.getName() = " + star.getName());
    }
}

2. @Restcontroller

@RestController 사용하면 모든 메서드에 @ResponseBody 효과가 난다. 

 

3. Path Variable, Request Param, ModelAttribute

package com.sparta.springmvc.request;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/hello/request")
public class RequestController {
    @GetMapping("/form/html")
    public String helloForm() {
        return "hello-request-form";
    }

    // [Request sample]
    // GET http://localhost:8080/hello/request/star/Robbie/age/95
    @GetMapping("/star/{name}/age/{age}")
    @ResponseBody
    public String helloRequestPath(@PathVariable String name, @PathVariable int age)
    {
        return String.format("Hello, @PathVariable.<br> name = %s, age = %d", name, age);
    }

    // [Request sample]
    // GET http://localhost:8080/hello/request/form/param?name=Robbie&age=95
    @GetMapping("/form/param")
    @ResponseBody
    public String helloGetRequestParam(@RequestParam(required = false) String name, int age) {
        return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
    }

    // [Request sample]
    // POST http://localhost:8080/hello/request/form/param
    // Header
    //  Content type: application/x-www-form-urlencoded
    // Body
    //  name=Robbie&age=95
    @PostMapping("/form/param")
    @ResponseBody
    public String helloPostRequestParam(@RequestParam String name, @RequestParam int age) {
        return String.format("Hello, @RequestParam.<br> name = %s, age = %d", name, age);
    }

    // [Request sample]
    // POST http://localhost:8080/hello/request/form/model
    // Header
    //  Content type: application/x-www-form-urlencoded
    // Body
    //  name=Robbie&age=95
    @PostMapping("/form/model")
    @ResponseBody
    public String helloRequestBodyForm(@ModelAttribute Star star) {
        return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
    }

    // [Request sample]
    // GET http://localhost:8080/hello/request/form/param/model?name=Robbie&age=95
    @GetMapping("/form/param/model")
    @ResponseBody
    public String helloRequestParam(@ModelAttribute Star star) {
        return String.format("Hello, @ModelAttribute.<br> (name = %s, age = %d) ", star.name, star.age);
    }

    // [Request sample]
    // POST http://localhost:8080/hello/request/form/json
    // Header
    //  Content type: application/json
    // Body
    //  {"name":"Robbie","age":"95"}
    @PostMapping("/form/json")
    @ResponseBody
    public String helloPostRequestJson(@RequestBody Star star) {
        return String.format("Hello, @RequestBody.<br> (name = %s, age = %d) ", star.name, star.age);
    }
}

정리 

 

[대답한 주요 질문]

 

인덱스가 무엇인지? 

테이블의 동작 속도를 높여주는 자료구조를 말합니다. 

 

인덱스의 원리

MySQL은 B tree 자료구조를 이용하며 문자열을 쪼개어 탐색하는 방식으로 이루어집니다. 탐색 속도는 O(log N)입니다.

 

 

[대답 못한 질문]

 

SOLID와 특징에 대해서 Nest.js의 DI/IoC 등의 개념과 엮어서 설명해 주세요.

 

SOLID는 객체지향 프로그래밍의 다섯가지 기본 원칙입니다.

단일 책임 원칙, 개방 폐쇄 원칙, 리스코프 치환 원칙, 인터페이스 분리 원칙, 의존 관계 역전 원칙이 있습니다. 

 

SOLID 의 D인 의존관계 역전 원칙에 의하면 프로그래머는 추상화에 의존해야합니다.

DI Dependency Injection 즉 의존성 주입을 통해 하나의 객체가 다른 객체의 의존성을 제공하여 추상화를 이루는 것이 

이상적인 객체지향 프로그래밍이라고 할 수 있습니다.

 

 

[대답은 했지만 더 공부가 필요하거나 횡설수설한 질문]

 

Getter와 Setter로 가져올 수 있다면 캡슐화가 되지 않은 것이 아닌가요?

클래스 외부에서는 공개된 인터페이스만 사용할 수 있으며

내부 구현에 대한 세부 사항은 감춰지므로 캡슐화가 이루어졌다고 할 수 있습니다.

 

CI/CD 파이프라인 

master 브랜치에 push를 하게 되면 Github Actions를 통해 자동으로 빌드를 하게 되고 빌드된 파일을 압축하여 S3 버킷에 올리게 됩니다. 이때 CodeDeploy를 이용하여 사용하는 EC2에서 S3버킷에 올라온 파일을 가져오고 압축을 해제 하여 배포하고 PM2를 통해 올라온 파일을 자동으로 다시 띄웁니다. 

 

자기소개에서 거꾸로 생각한다는 정확한 의미

원점으로 돌아가 처음부터 문제를 거슬러 올라감으로서 보다 구체적으로 문제 해결을 할 수 있다는 점을 강조하고 싶었습니다.

 

 

 

controller에서 자바 객체를 반환하면 자동으로 json 형태로 변환해 준다.
(Jackson 라이브러리)

 

직렬화 serialize

Object를 json으로 바꾸는 과정

 

역직렬화 deserialize

json Object 바꾸는 과정

 

@RestController  사용하면 모든 메서드에 @ResponseBody 효과가 난다. 

 

 

KPT

Keep

열심히 하려고 하는 것

Problem

휴일에도 열심히 해야 하는데 휴일이라고 즐겁게 놀아버린 것

Try

시간을 아껴 쓰기

소감

열심히 살자

 

 

 

'verdantjuly > Today I Learned' 카테고리의 다른 글

TIL 20240328  (0) 2024.03.28
TIL 20240309  (0) 2024.03.09
TIL 20240229  (0) 2024.02.29
TIL 20230227  (0) 2024.02.27
TIL 20240226  (2) 2024.02.26