Spring 16

Spring Web MVC - @Controller / @RestController

과거에 배웠던 개념인데 프로젝트를 진행하면서 떠오르지 않는다면, 해당 개념이 제대로 숙지되지 않다는 증거입니다. 또한 개념만 죽어라 공부한다고 해서 성장할 수 없습니다. 스스로 프로젝트를 진행해야만 보이는 것들이 있습니다. 1. 현재 나에게 "부족한 개념"은 무엇인가 2. 프로젝트를 완성하기 위해서 "무슨 개념"을 적용해야하는가 3. 그리고 완성할때까지 반복 4. 완성된 이후 개선작업 (서비스와 유지보수 측면 등 고려) . . 블로그를 만들때 중요한 서비스는 아래와 같습니다. 게시글 등록/수정/삭제 → 현재 단계 뷰 렌더링 부가서비스(채팅방 등) 1. @Controller - 쿼리파라미터로 데이터 전달하기 요청 데이터를 전달할때 가장 기본적인 방법입니다. HelloController를 생성하고 서버 연결..

Spring 2023.12.26

리팩토링이 왜 필요한가?

내가 제대로 이해했는가를 알고 싶으면 자신의 생각을 글로 쉽게 풀어서 설명할 줄 알아야 하죠. 그런 맥락에서 오늘은 면접 질문 중 하나인 리팩토링에 대해 정리해볼게요. 1. 리팩토링에 대해 알고 계신지요? 서비스의 비지니스 기능(로직)이 확장될때, 기존 코드의 변경범위를 최소화하기 위해 코드를 재구성하는 단계입니다. 백엔드 기준에서 살펴보면, 클라이언트 코드에 영향성을 주지 않는 범위에서 서버쪽 코드만을 변경해서 서비스를 추가 혹은 변경함을 포함하고 있습니다. 2. 목적 앞서 말씀 드린 기능 확장 뿐만 아니라 가독성, 유지보수 측면에서 리팩토링은 필수죠. 아래와 같이 정리해봤어요. 의존관계와 복잡도를 고려한 효율화 작업 (성능과 직결) 유지보수 유리하며 코드 재사용을 높이기 위함 클린 코드를 지향하며 가..

Spring 2023.12.14

프로젝트준비과정 - MockMVC Controller 테스트

개별 프로젝트로 "나만의 블로그"를 개발하려고 합니다. 다른 개발자분들은 어떻게 개발하셨는지 참고하고 있는데요. "MokcMVC"라는 클래스가 많이 보이네요. 한번 알아보겠습니다. 1. MockMVC 스프링 문서와 다른 블로그를 살펴보니, 개발한 웹 프로그램을 실제 서버에 배포하지 않고도 테스트를 위한 요청을 제공하는 클래스인 것 같네요. The Spring MVC Test framework, also known as MockMvc, provides support for testing Spring MVC applications. It performs full Spring MVC request handling but via mock request and response objects instead of a..

Spring 2023.11.28

프로젝트준비과정 - @PostMapping / @GetMapping

개별프로젝트로 "나만의 블로그"를 만들어볼까 합니다. 가장 무난하기도 하고 참고할만한 글들이 많은 것 같아서요. 먼저 블로그 글을 등록할때 쓰이는 @PostMapping과 블로그 게시글을 확인할때 쓰이는 @GetMapping에 대해 알아보겠습니다. 1. @PostMapping @PostMapping annotation in Spring MVC framework is a powerful tool for handling the HTTP POST requests in your RESTful web services. It maps specific URLs to handler methods allowing you to receive and process data submitted through POST reque..

Spring 2023.11.27

인터넷 통신 기초 (IP/패킷/TCP)

*인프런 강의 수강 후 개념 정리용 게시글입니다. Web의 핵심적인 기술은 인터넷입니다. 인터넷의 핵심은 다양한 서버들끼리 통신이 가능한 거대한 네트워크를 구축하고 있다는 점입니다. 그렇다면 여러 노드 간 복잡한 인터넷망 속에서 어떻게 정보를 교환할까요? 1. IP (Internet Protocol)란? 인터넷이 통하는 네트워크에서 어떤 정보를 수신하고 송신하는 통신에 대한 규약을 의미합니다. 통신 기능이 제공되는 기기들이 서로 통신하기 위해 필요한 고유 번호이기도 한데요. 각 장치들 간 통신을 식별할 수 있는 주민등록번호 또는 전화번호라고 생각하시면 됩니다. 2022년 기준 IPv4와 IPv6 두 가지 체계가 있습니다. 널리 사용되는 IP주소는 IPv4이며 32비트의 값을 갖는다 정도로만 짚고 넘어가겠..

Spring 2023.11.23

객체지향 설계 원칙 5가지 - SOLID

컴퓨터 프로그래밍에서 SOLID란? 로버트 마틴이 2000년대 초반에 명명한 객체 지향 프로그래밍 및 설계의 다섯 가지 기본 원칙을 소개했습니다. 프로그래머가 시간이 지나도 유지 보수와 확장이 쉬운 시스템을 만들고자 할 때 이 원칙들을 함께 적용할 수 있다 1. SOLID SRP : 단일 책임 원칙 (Single responsibility principle) ㄴ 한 클래스는 하나의 책임만 가져야 한다. ㄴ 변경이 있을때 side-effect가 적으면 SRP을 잘 준수한 것 OCP : 개방-폐쇄 원칙 (Open/closed principle) ★ ㄴ 소프트웨어 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. (단, 클라이언트 코드가 변경되면 안된다) ㄴ 다형성을 활용해 상위 클래스는 Closed,..

Spring 2023.11.13

static 메소드와 instance 메소드의 메모리 생성 시점이 다르다?

※ 출처는 하단 참고 하시기 바랍니다. 우선 자바 프로그램 실행과정을 간단하게 살펴봅시다. 1. 자바 프로그램 실행과정 자바 애플리케이션을 개발하고 실행하기 위한 자바 플랫폼의 3대 구성 요소로는, 1) JDK 2) JVM 3) JRE 이 있습니다. 실행과정은 크게 컴파일 환경과 런타임 환경으로 나뉩니다. 컴파일 타임 환경 1) JDK Compiler를 통해 자바소스코드(.java)를 JVM이 읽을 수 있도록 자바 바이트 코드(.class)로 변환하는 역할 2) 실행파일 생성되는 과정 런타임 환경 1) 자바 애플리케이션이 디바이스 또는 클라우드 환경에서 실행되는 데 필요한 리소스를 확보하도록 보장하는 역할 2) 프로그램 실행 과정 2. static 메소드와 instance 메소드의 메모리 생성 시점이 다..

Spring 2023.11.08

클래스 메소드 vs 인스턴스 메소드 단순 코드 비교

자바 클래스 기본 구조와 용어 . 이전 시간에 배운 내용을 복기해보면, 메소드는 파이썬의 함수처럼 기능과 행위를 의미합니다. 메소드는 static 유무에 따라 나뉘는데요. 살펴보겠습니다. 1. 클래스 메소드(Static Methods) 메소드 생성시 static이 붙은 메소드 메소드 호출 전 해당 클래스의 인스턴스를 생성할 필요가 없다. (객체 생성 X) 'Class명.메소드' 로 사용하면 된다. 장점 : 메모리 loss를 줄일 수 있고 과부하 방지 For example : Math.abs(-5); or Member.get() // API 문서 : https://docs.oracle.com/javase/8/docs/api/java/lang/Math.html 2. 인스턴스 메소드(Instance Metho..

Spring 2023.11.08

자바 클래스 기본 구조와 용어

자바파일(어떤 클래스)을 생성하게 되면 기본구조는 아래와 같습니다. 클래스 { //필드 // 생성자 // 메서드 } 1. 용어 설명 객체 생성에 있어 필드와 생성자가 필요합니다. 필드는 속성을 의미하고, 해당 클래스가 가지고 있는 기본정보(객체의 성질)를 뜻합니다. 생성자는 객체 생성과 동시에 객체의 유효함을 보장하는 역할을 합니다. (모든 클래스는 하나의 생성자 이상을 가져야합니다) 메서드는 기능/행위를 의미합니다. 파이썬에서는 기능을 구현하기 위해 함수를 정의하는데 자바에서는 함수라는 표현대신에 메서드라는 용어를 사용합니다. 2. 코드를 통해 알아보는 기본 구조 public class MemberInfo { // 필드 // 값을 정해주지 않아서 null String name; // 생성자 // NPE..

Spring 2023.11.07

STEP3 회원 리포지토리 메모리 구현체 생성

*인프런 강의 중 일부 예제 코드를 발췌하였으며, 주석을 통해 학습 이해도를 높이는 방향으로 스터디하고 있습니다. . 설계한 인터페이스를 활용하여 구현체(데이터 저장소)를 직접 생성해봅니다. 1. MemoryMemberRepository import domain.Member; import java.util.*; public class MemoryMemberRepository implements MemberRepository { // map : 리스트/배열을 순차적으로 요소의 값을 구하는게 아니라 key-value 얻기 위함 // Key : id // Value : Member (필드 확장 고려한 member 객체 인스턴스) ★★ private static Map store = new HashMap(); ..

Spring 2023.11.06