전체 글 42

스프링 기본원리 - SOLID 원칙 /주문과 할인 도메인 설계

지난 시간에는 회원 / 회원 서비스에 대한 도메인 설계 및 구현을 스프링 기능을 제외하고 순수 자바코드로 진행했었는데, 이렇게 짠 코드에는 어떤 문제가 있는지 살펴보겠습니다. 어떠한 문제가 있는지 알아보기 위해서는 객체지향 SOLID 원칙에 대해서 먼저 알아봐야합니다. SOLID는 객체지향 프로그래밍에서 다섯 가지 설계 원칙을 나타냅니다. 이 원칙은 소프트웨어 설계의 유지보수성, 확장성, 가독성, 재사용성 등을 향상시키는데 목적을 두고 있습니다. 1. 단일 책임 원칙(SRP) - 클래스는 하나의 책임만 가져야 한다. 2.개방/폐쇄 원칙(OCP) - 소프트웨어 엔티티는 확장에는 열려있고, 변경에는 닫혀있어야 한다. -새로운 기능을 추가할 때 기존의 코드를 변경하지 않고 확장할 수 있어야 한다. 여기서 보면..

스프링 2024.02.12

스프링 기본원리 - 김영한 (Entity/Repository/Interface)

스프링을 접하면서 너무 많은 개념들과 메서드,기술들이 사용되고 정리가 되지 않아서 강의를 통한 학습을 하면서 개념과 동작 원리에 대해서 기술 해놓으려고 합니다. 개인적인 공부를 하며 깨닫고 배운 점을 작성하기 때문에 잘못 이해한 부분은 틀릴 수도 있습니다. 강의는 인프런 내 - (김영한) 스프링 부트 핵심원리를 수강하였으며 이 강의에서는 회원이 있는 상점 프로젝트를 진행하였습니다. 먼저 회원과 관련된 전체적인 설계도는 이렇습니다. 1) 회원 도메인 설계 - 회원 서비스는 '회원가입'/'회원조회' 기능으로 이루어져있습니다. -회원 정보를 저장할 저장소는 '메모리 방식' / '외부 DB 방식'을 구현 해놓고 의존관계 설정에 따라 변경토록 했습니다. 2)회원 클래스 -회원과 관련된 메서드들을 정의하는 인터페이..

스프링 2024.02.12

Math.random() 메서드를 통해 '로또 번호 생성기' 만들기 (JAVA)

저번 시간에 가볍게 다루었던 Math.random() 메서드를 통해 가장 와닿고 재밌다고 생각되는 로또 번호 생성기 코드를 한 번 작성해 보겠습니다. 이것만이 정답은 아니고 여러가지 방법이 있겠지만 저는 배열 선언과 배열간 자리바꿈을 통한 로또 번호 생성을 했습니다. public class lotto { public static void main(String[] args) { int[] ball = new int[45]; for(int i=0; i

JAVA 2024.01.11

Integer.ParseInt() / Math.round() / Math.random() 메서드 (JAVA)

정해진 순서나 의미는 없지만, JAVA 언어에 대해서 따로 공부하며, 익숙치 않거나 기본적인 문법의 쓰임을 정리해보려고 합니다 . 처음으로 정리할 부분은 Integer.ParseInt() , Math.round(), Math.random() 메서드 입니다. Integer.ParseInt() 메서드 = 문자열을 Int형으로 반환하는 메서드 예시를 먼저 살펴보겠습니다. 이 예시에서는 두 자리 정수를 문자열로 입력받고 입력받은 값을 정수형으로 바꾸는 예시입니다. String 형인 input 변수에 scan.nextLine() 메서드를 통해 문자열을 입력받습니다. 사전에 sout을 통해서 두자리 정수를 입력해달라고 띄웠기 때문에 두 자리의 정수가 들어올 것을 예상해두고 (이는 예시이기 때문에 이렇게 했지만, 두..

JAVA 2024.01.11

HTTP 헤더2 캐시와 조건부 요청 / 프록시 캐시 (HTTP 김영한)

이번 시간에는 캐시에 대해서 알아보겠습니다. 먼저 캐시가 없는 초기 GET 요청부터 순차적으로 살펴보겠습니다. 초기 GET 요청을 통해 서버로 부터 star.jpg 라는 이미지 파일을 받아옵니다. 이때 star.jpg를 받기 위한 http 메시지의 크기는 헤더의 크기 0.1M / 바디의 크기는 1.0M 입니다. star.jpg에 대한 실질적인 내용은 바디에 담겨있기 때문에, 바디의 크기가 더 클 수 밖에 없습니다. 그렇게 되면, 브라우저는 서버에서 보낸 star.jpg에 대한 http 메시지를 받아 렌더링하고 이미지를 인식합니다. 이후 브라우저(클라이언트)가 다시 star.jpg를 다운로드 받아 사용해야할 일이 있어, 요청을 또 보냅니다. 캐시의 역할은 지금부터 나타납니다. 만약 캐시의 개념이 없는 경우..

HTTP 2024.01.08

백준 9498번 '시험 성적' (JAVA 11)

점수를 입력받고 점수에 맞는 시험 성적을 출력하는 문제입니다 90점~100점 = A 80점~89점= B 70점~79점= C 60~69점= D 59점 이하=F 위 조건에 알맞게 else-if 문을 작성하여 줍니다. D 성적 까지는 각 성적의 최대값 && 각 성적의 최소값 조건을 나타내줍니다 (&& =논리연산자 AND) F 성적은 위 조건 모두에 해당하지 않는 경우 이므로 else 문을 사용합니다

백준 2024.01.07

백준 2753번 '윤년' (JAVA 11)

import java.util.Scanner; public class Main { public static void main(String args[]) { Scanner scan = new Scanner(System.in); int a = scan.nextInt(); if (a % 4 == 0 && a%100 !=0 || a%4==0 && a%400==0 ) { System.out.println("1"); }else { System.out.println("0"); } } } Scanner 클래스를 이용하여, 숫자를 입력받고 윤년의 조건문을 if문에 적용시킵니다. 윤년의 조건은 , 4의 배수이고 100의 배수가 아닐 때 입니다. 단 100의 배수는 아니지만 400의 배수인 경우에는 윤년입니다. 예를 들면,..

백준 2024.01.07

HTTP 헤더 (http 김영한)

이번시간에는 HTTP의 헤더에 대해서 알아보겠습니다. HTTP 헤더 -HTTP전송에 필요한 모든 부가정보 (메시지 바디 내용/ 바디 크기/ 압축/ 인증 / 요청 클라이언트/ 서버 정보 등등) 포함. -표준 헤더도 많고 필요시 임의로 헤더 추가 기능도 있습니다. 과거의 HTTP 헤더를 먼저 살펴보면 General 헤더 : 메시지 전체에 적용되는 정보 (요청/응답 관계없이) Request 헤더 : 요청 정보 Response 헤더 : 응답 정보 Entity 헤더: 엔티티 바디 정보 (엔티티 본문(메시지 바디)를 해석할 수 있는 정보=> 데이터 유형/길이, 압축정보) 하지만 RFC2616 표준에서 2014년 RFC7230~7235 표준이 등장함에 따라 달라진 점이 있습니다. Entity(엔티티) -> Repre..

HTTP 2024.01.07

HTTP 상태코드 (http 김영한)

저번 시간에 공부한 http 메서드에 이어 http 상태코드에 대해 알아보자. 웹 페이지 개발을 조금이라도 건들여 본 사람이라면 프론트엔드와 백엔드 연동 시, 상태코드에 대해 접해본 적이 있을 것이다. 클라이언트 측에서 HTTP 요청 메시지를 보내면 , 서버에서 요청에 대한 처리를 하고 클라이언트에게 결과 응답 메시지를 보내준다. 이 경우 응답메시지 시작 부분에 200 과 같은 상태코드가 나타나는데 , 이 상태코드에 대해서 알고 있어야 제대로 처리가 되었는지, 오류가 발생했는지 오류가 발생했다면 무슨 오류인지 알 수 있다. 크게 다음 5개의 상태코드로 나타낼 수 있다 1xx (informational): 요청이 수신되어 처리 중인 상태. 2xx (Successful) : 요청 정상 처리 3xx (Redi..

HTTP 2024.01.07