Language/Spring Boot || Spring 2024. 2. 26.
[계산기 프로젝트] 스프링 시큐리티 SecurityFilterChain "리디렉션한 횟수가 너무 많습니다" 오류 해결
SecurityConfig.class @Configuration @EnableWebSecurity public class SecurityConfig { @Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http.csrf((x)->x.disable()); http.authorizeHttpRequests(a-> a .requestMatchers("/four-basic-calc/**" ,"/programming-calc","scientific-calc","exchange-rate-calc").permitAll() .requestMatchers("/","/login", "/loginProc", "/j..
BlockChain 2024. 2. 26.
비트코인과 이더리움의 차이에 대해서 알아보자
비트코인은 화폐 시스템에 특화되어있었기 때문에 다른 서비스에도 활용하려는 시도가 있었는데 대표적인것이 이더리움(범용 블록체인 플랫폼)이다. 이더리움 : 튜링 완전성 & 비트코인 : 튜링 불완전성 튜링 완전성이 지원되는 프로그래밍 언어란 IF 조건문과 For/While 반복문을 지원하여 세상의 모든 문제를 기계적으로 해결할 수 있게 구현하는 것이 가능한 언어이다. 파이썬,자바,자바스크립트 등은 모두 튜링 완전성이 지원되는 언어이다. 비트코인은 트랜잭션을 구현할때 Script라는 언어를 쓰는데 이는 반복문과 흐름제어기능(조건문)을 쓰지 않는다. 비트코인의 script는 튜링 불완전 언어이다. 왜 튜링 불완전 언어를 비트코인에서 사용했냐면 송금 프로세스만 처리하기 때문에 굳이 복잡한 언어를 만들 필요가 없다...

BlockChain 2024. 2. 26.
블록체인 노드, nonce, 작업증명(Pow)이 뭘까?
노드(in BlockChain) 블록체인에서의 노드는 분산 네트워크 상에 존재하는 컴퓨터를 가리킨다. 노드들은 모두 블록체인 네트워크에 연결되어 있으며, 서로 통신하며 블록체인의 데이터를 공유하고 동기화시킨다. nonce 수학에서의 미지수랑 비슷한 건데, 블록체인에서 목푯값보다 작은 nonce값을 찾는 작업을 채굴작업이라고 한다. 또한 nonce값 자체가 채굴 작업을 수행했다는 증명(작업증명, pow)이다. 왜 “목표값 자체를 찾지”않고 “목표값보다 작은 값을 찾냐”면, 예를 들어 대표적인 블록체인 기반 화폐인 비트코인에서 nonce값을 찾을 때 나올 수 있는 경우의 수는 2^256 가지이다. 이들 중에서 단 하나의 값을 찾는것은 현재 기술로는 슈퍼컴퓨터로도 불가능하다. 또한 범위를 설정해놓으면 과학기술..
CodingTest 2024. 2. 26.
[Java] 프로그래머스 레벨 2 #H-index
https://school.programmers.co.kr/learn/courses/30/lessons/42747?language=java 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int solution(int[] citations) { int answer = 0; Arrays.sort(citations); int leng = citations.length; for(int i=0; ileng-i) { answer=leng-i; break; } } return answer;..
NetWok/HTTP 2024. 2. 21.
캐시와 관련된 HTTP 헤더
검증 헤더 캐시되어 있는 데이터와 서버의 데이터가 똑같은지 검증하는 헤더이다. Last-Modified : 데이터가 최종 수정된 날짜 ETag : 데이터 리소스의 식별자로 사용되는 해시값으로, 클라이언트와 서버 간에 리소스 변경이 일어났는지 확인하기 위해 사용된다. 클라이언트는 ETag를 이용하여 이후 같은 리소스에 대한 요청을 보낼 때, 서버에 해당 리소스가 변경되었는지를 물어본다. 리소스가 변경되지 않았으면 서버는 304(Not Modified)를 반환하여 리소스를 다시 보내지 않고 클라이언트가 가지고 있는 캐시된 버전을 사용하도록 안내한다. 조건부 요청 헤더 Client->Server로 요청이 갈 때, 요청이 특정 조건을 만족하는지 물어보는 헤더이다. 서버에서 리소스를 제공할지 말지 여부를 결정하는..

CodingTest 2024. 2. 21.
[Java] 프로그래머스 레벨 2 #n^2 배열 자르기
https://school.programmers.co.kr/learn/courses/30/lessons/87390# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public int[] solution(int n, long left, long right) { int leng = (int)(right-left+1L); int[] answer = new int[leng]; long nL = (long)n; int lr; if(left==0L) lr=0; else lr = (int)(left/nL); int lc; if(left=..

NetWok/HTTP 2024. 2. 20.
HTTP 헤더
HTTP 헤더(HTTP Header)는 HTTP 요청(Request)이나 응답(Response) 메시지에 포함되는 메타데이터 정보이다. 메타데이터는 클라이언트와 서버 간의 통신을 도와주는 여러 가지 정보를 제공한다. HTTP 헤더는 특정 형식을 가지고 있으며, 헤더 이름과 값을 가지고 있다. 각 헤더는 콜론(:)으로 이름과 값을 구분한다. 요청 헤더(Request Header): Client to Server / 요청하는 클라이언트의 정보, 요청하는 리소스의 종류, 캐시 관련 정보 등이 적혀있다. 응답 헤더(Response Header): Server to Client / 서버의 정보, 응답의 상태 코드, 전송하는 데이터의 형식 등이 적혀있다. 표현과 관련된 헤더 Content-Type : 표현 데이터의..
CodingTest 2024. 2. 20.
[Java] 프로그래머스 레벨2 #괄호 회전하기
https://school.programmers.co.kr/learn/courses/30/lessons/76502 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int solution(String s) { int answer = 0; StringBuffer sb = new StringBuffer(s); for(int i=0; i

Language/Spring Boot || Spring 2024. 2. 18.
스프링 빈 스코프
빈 스코프 : 빈이 존재할 수 있는 범위 스프링은 다양한 스코프를 지원한다. 싱글톤 : 기본 스코프, 스프링 컨테이너의 시작과 종료까지 지원되는 가장 넓은범위의 스코프 프로토타입: 컨테이너가 프로토타입 빈의 생성과 의존관계 주입까지만 관리하는 짧은 범위의 스코프 웹 스코프 request : HTTP 요청 하나가 들어오고 나갈때까지 유지되는 스코프. 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다. session : 웹 세션이 생성되고 종료될때까지 유지되는 스코프 application : 웹의 서블릿 컨텍스트와 같은 범위(동일한 생명주기)로 유지되는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 프로토타입 스코프 프로토타입 빈은 클라이언트가 스프링 컨테이너에 요청할..
Language/Spring Boot || Spring 2024. 2. 17.
Spring Boot에서 base64로 이미지 업로드,다운로드 기능 구현하기
Base64 : 이진데이터를 텍스트(ASCII)로 바꾸거나 (인코딩) 반대 과정(디코딩) 을 처리하는 방법 중 하나이다. 이진 데이터는 6비트씩 묶이는 반면에 ASCII 문자는 8비트로 표현되기 때문에 인코딩 과정 후 텍스트 데이터는 원래 데이터보다 크기가 약 33% 증가한다. Board에 byte[] mediaData 엔티티 추가 @Lob @Column(name = "mediaData", columnDefinition="LONGBLOB") private byte[] mediaData; public void setMediaData(MultipartFile file) { try { this.mediaData = file.getBytes(); // 이미지 파일을 byte 배열로 변환하여 저장 } catch ..
CodingTest 2024. 2. 17.
[Java] 프로그래머스 레벨 2 #연속 부분 수열 합의 개수
https://school.programmers.co.kr/learn/courses/30/lessons/131701 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int solution(int[] elements) { Set s = new HashSet(); int leng = elements.length; for(int i=1; i

Language/Spring Boot || Spring 2024. 2. 15.
Spring 빈의 생명주기와 생명주기 콜백에 대해 알아보자
스프링 빈의 생명주기란? 빈의 생명주기(라이프사이클)이란 스프링 컨테이너가 빈을 생성하고 관리하는 과정 전반을 의미한다. 빈 정의 → 빈 생성 → 의존관계 주입 → 빈 초기화(초기화 메소드 콜백) → 빈 사용 → 빈 소멸(소멸 전 콜백) 으로 이루어져 있다. Q. 콜백 (콜백 메소드)란? A. 콜백과 콜백 메소드는 같은 말이다. 객체가 특정 상태에 도달했거나 특정 이벤트가 발생했을 때 자동으로 호출되는 메소드이다. (초기화 상태 도달 → 초기화 메소드 콜백, 소멸 상태로 전환 → 종료 메소드 콜백) Q. 빈 초기화와 초기화 메소드란? A. 초기화 메소드는 빈이 생성된 후에 추가 설정과 초기화 작업(외부 서비스와의 연동, 속성 설정, 캐시 초기화 등)을 하기 위해 호출되는 메소드이다. 스프링 컨테이너를 통..

CodingTest 2024. 2. 15.
[Java] 프로그래머스 레벨 2 #귤 고르기 (getOrDefault 중복값 세기, 메소드 참조)
https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int solution(int k, int[] tangerine) { int answer=0; //스트림을 사용해 int[]을 Integer[]로 바꾸고 Arrays.aslist()로 arraylist로 변환함. Integer[] tin = Arrays.stream(tangerine).boxed().toArray(In..

Language/Spring Boot || Spring 2024. 2. 8.
Spring 생성자 주입을 선택해야 하는 이유
생성자 주입을 선택해야 하는 이유 1. 불변 대부분의 DI는 한번 주입되면 애플리케이션 종료 시점까지 의존관계가 변하면 안 된다.(불변해야 한다) 수정자(setter) 주입은 set00 메소드를 public으로 열어두어야 한다. 그렇게 하면 의존관계를 누군가 변경할 수 있기 때문에 좋은 방법이 아니다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되고 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. 2. 누락 수정자 주입을 사용하면 의존관계가 누락되었을 때, 애플리케이션 실행은 가능하지만 실행 결과는 NPE가 뜨게 된다. 생성자 주입을 사용하면 같은 상황에서 컴파일 오류를 알려줌과 함께 인텔리제이가 어떤 의존관계를 필수로 주입해야 하는지 알려준다. (생성자 주입 사용시 의존관계 누락되었을..

Language/Spring Boot || Spring 2024. 2. 7.
Spring 의존관계 주입(DI) 방법
1. 생성자 주입 :생성자를 통해 의존관계를 주입받는다. 특징 : 불변, 필수 의존관계에 사용, 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 생성자가 딱 하나뿐이라면 Autowired를 생략해도 빈이 자동주입된다. @Component public class OrderServiceImpl implements Orderservice { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired //생성자가 단 하나(OrderServiceImpl) 뿐이라면 Autowired를 생략해도 스프링 빈이 자동 주입된다. public OrderServiceImpl(MemberRepo..
CodingTest 2024. 2. 7.
[Java] 프로그래머스 레벨 2 #예상 대진표
https://school.programmers.co.kr/learn/courses/30/lessons/12985 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { public int solution(int n, int a, int b) { int answer = 0; while(a!=b) { a = win(a); b = win(b); answer++; } return answer;} int win(int x) { if(x%2==0) x/=2; else x=(x+1)/2; return x;} }

Git 2024. 2. 3.
[GitHub] Push시 error: failed to push some refs to ~~ 에러 해결
인텔리제이 상단의 Git>Push>로컬 리포지토리에서 원격 리포지토리로 푸시했을 때 뜨는 에러메세지이다. hint : Updates were rejected because a pushed branch tip is behind its remote counterpart. If you want to integrate the remote changes, use 'git pull' before pushing again. (번역 : 푸시된 브랜치 팁이 원격 대응 항목 뒤에 있기 때문에 업데이트가 거부되었습니다. 원격 변경 사항을 통합하려면 다시 푸시하기 전에 'git pull'을 사용하세요.) 원격 저장소에는 있는 파일이 내 로컬 리포지토리에는 없을 때 커밋을 원격저장소에 푸시하려고 하면 발생하는 오류이다. 해결방..

CodingTest 2024. 2. 2.
[Java] 프로그래머스 레벨 2 #점프와 순간이동
https://school.programmers.co.kr/learn/courses/30/lessons/12980 import java.util.*; public class Solution { public int solution(int n) { int ans = 0; ArrayList list = new ArrayList(); while(true) { while(n%2==0) {n/=2;} //짝수인 동안에는 계속 2로 나눔 if(n==1) {ans=list.size()+1;break;} //초기n이 2의 거듭제곱수면 지금까지 한 연산횟수+1을 저장 else list.add(n); //초기n이 2의 거듭제곱수가 아니면 연산횟수를 list에 저장 n--; //짝수가 아니면 1을 빼 짝수로 만듬. **이 값..

Language/Spring Boot || Spring 2024. 1. 31.
스프링부트 순환참조 문제
실행 시간을 측정하는 TimeTraceAop 클래스를 만들었더니 스프링부트 순환참조 에러메세지가 떴다. Description: The dependencies of some of the beans in the application context form a cycle: memberController ↓ memberService defined in class path resource [hello/hellospring/SpringConfig.class] ┌─────┐ | timeTraceAop defined in class path resource [hello/hellospring/SpringConfig.class] └─────┘ Action: Despite circular references being al..
순간을 사랑하는 거야
보호되어 있는 글입니다.

Language/Java 2024. 1. 24.
[Java] clone() / 공변 반환타입 / 복사의 깊이
자바의 메소드 clone()의 기능은 한마디로 복붙. 자신을 복제하여 새로운 인스턴스를 생성한다. 선언부는 protecetd Object clone() 이다. clone()을 쓰려면 몇 가지 조건이 걸린다. 1) 사용하려는 클래스에 Cloneable 인터페이스를 구현해주어야 한다. 2) 사용하려는 클래스 쪽에서 clone()을 오버라이딩하면서 접근 제어자를 public으로 바꿔주어야 한다. (이렇게 해야 상속관계가 없는 다른 클래스에서 clone()을 호출할 수 있다.) 3) 조상클래스의 clone()을 호출하는 코드 super.clone()과 필수 예외처리 CloneNotSupportedException이 포함된 try-catch 문을 작성한다. public class Pointt implements ..

Language/Java 2024. 1. 23.
Java 예외처리란 : "오류가 나기 전에 방어막 치는것"
자바는 오류를 에러와 예외로 구분한다. 에러는 코드로 수습될 수 없는 오류, 예외는 프로그래머가 미리 예측하여 코드(예외처리 코드)로 수습할 수 있는 오류를 말한다. 예외클래스 계층구조: 실행 시 발생할 수 있는 오류를 클래스로 정의한 것이다. 모든 예외의 조상은 Exception 클래스이며, 그 자손들은 크게 두 분류로 나눌 수 있다. RuntimeException클래스들 : 프로그래머의 실수로 발생한 예외, 컴파일러가 예외처리를 확인하지 않아 unchecked 예외라고도 한다. Exception클래스들(런타임예외를 제외한 나머지): 사용자의 실수(입력 데이터 형식이 잘못됨) 등의 외적 요인에 의해 발생한 예외. 컴파일러가 예외처리를 확인하므로 checked 예외라고도 한다. 자바의 예외처리 구문에 대..
Language/Java 2024. 1. 23.
Java 객체지향의 꽃, 다형성
다형성 여러 형태를 가질 수 있는 성질. 자바에서는 “한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있는 것”을 다형성이라고 한다. 특히 두 클래스가 서로 상속관계에 있을 경우, 조상 타입의 참조변수로 자손 클래스의 인스턴스를 참조하는 것이 가능하다. (자손타입으로 조상 인스턴스 참조는 안됨) Tv t = new Tv(); CaptionTv c = new CaptionTv(); //참조타입과 인스턴스 타입 일치 Tv tc = new CaptionTv(); //조상타입(Tv)의 참조변수로 자손 인스턴스(CaptionTv)를 참조 참조변수의 형변환 참조변수의 형변환은 서로 상속 관계에 있는 클래스에서만 가능하다. From 자손 to 조상(업캐스팅) : 형변환 생략가능 From 조상 to 자손(다운캐스팅..

Language/Java 2024. 1. 23.
Java 변수와 메소드의 종류
클래스와 객체(인스턴스) 책의 설명 중에 가장 맘에 든 비유 : 클래스는 붕어빵틀이고, 객체는 붕어빵이다. (오~) 클래스를 통해 객체를 만드는 과정을 인스턴스화라고 한다. 인스턴스는 객체와 같은 것을 말하는데, 둘은 상황에 따라 조~금 다르다. 인스턴스가 객체보다 더 좁은 의미이다. String cat1; String cat2 = new String("박민우"); cat1은 객체가 되긴 했지만 아직 아무 값도 할당받지 않은 상태이다. 이는 객체라고는 할 수 있지만, 인스턴스라고 할 수 없다. (인스턴스 연습생) cat2는 객체이기도 하고, 해당 객체를 위한 메모리가 할당되어 실제 값 ‘박민우’가 들어있는 상태이다. 이것은 인스턴스라고 할 수 있다.(인스턴스 데뷔 성공) 객체의 구성요소: 속성(prope..
<비활성화> 부트캠프(슈퍼코딩) 2024. 1. 4.
슈퍼코딩 day5 중간보고
JSON JSON의 뜻은 Javascript Object Notation(자바스크립트 객체 표기법)이다. 클라이언트와 서버간의 통신을 위한 텍스트 데이터 포맷인 JSON은 자바스크립트에서만 쓰이는게 아닌 언어 독립형 데이터포맷이므로, 많은 프로그래밍 언어에서 사용할 수 있다. Json의 예시 { "name" : "Kim", "age" : 5, "alive" : true, "major" : ["physics", "violin"] } Json 키는 작은따옴표를 사용할 수 없다. 반드시 큰따옴표로 묶어야 한다. 자바스크립트의 객체 생성과 표기법이 비슷하다. JSON.stringify 클라이언트가 서버에게 객체를 전송해주려면 객체를 문자열로 변환해야 한다. 이 과정을 직렬화(serializing)라고 한다. 직..

<비활성화> 부트캠프(슈퍼코딩) 2023. 12. 28.
슈퍼코딩 첫 과제 계획
1. 일단 기획서에서 내가 잘 모르거나 어설프게만 알고 있는 단어를 정리해보자. *어드민 페이지 : 관리자 페이지 - 매일매일 바뀌는 워들의 답을 설정할 수 있는 페이지를 만들라는 말인듯. *spa : single page application 단일 페이지 어플리케이션. 서버가 하던 대부분의 화면 구성 작업을 브라우저에서 처리하는 개발 방식 -웹페이지의 렌더링 방식에는 SSR ServerSide Rendering과 SPA SinglePage Application이 있다. 요약: 웹 구동에 필요한 정적 리소스를 최초에 한 번만 다운로드한 후 렌더링의 역할을 서버가 아닌 브라우저에서 처리하는 방식. *mysql, sqlite -DBMS : 데이터베이스를 생성,저장 및 관리할 수 있는 응용프로그램. mysql..
<비활성화> 부트캠프(슈퍼코딩) 2023. 12. 19.
사전과정04: 프론트엔드와 백엔드 간의 API(Javascript와 Python)
*비동기 동작: 각 작업들의 시작/종료시점과 실행 순서를 결정할 수 없는 동작. 작업주체의 작업시간/종료시점이 서로 일치하지 않음. *프라미스(promise): 제작 코드와 소비코드를 연결해주는 자바스크립트 객체. -제작코드: 스크립트 불러오기 등 시간이 걸리는 일을함(구독자 알림설정) -소비코드: 제작코드의 결과를 기다렸다가 이를 소비함(구독자) -async: 함수 앞에 붙이면 해당 함수가 항상 프라미스를 반환함(프라미스가 아닌것도 프라미스로 감싸 반환) -fetch: fetch()를 이용해 url을 통한 원하는 api의 결과값을 받아올수있음 -await : 자바스크립트는 await를 만나면 프라미스가 처리될 때까지 기다림 *파이썬에서 get과 post의 차이 -get: 어떤 값을 조회해주세요 -pos..
