일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 데이터베이스
- 생성자 주입
- WEB SOCKET
- 카프카
- AWS
- 남궁성과 끝까지 간다
- 패스트캠퍼스
- CentOS
- visualvm
- 스웨거
- 스파르타코딩클럽
- 쇼트유알엘
- 스프링의 정석
- 웹개발
- @jsonproperty
- docker
- MYSQL
- java
- JavaScript
- Spring
- Kafka
- 개인프로젝트
- 프로그래머스
- emqx
- EC2
- 항해99
- JWT
- DB
- 시큐리티
- Spring Security
- Today
- Total
목록전체 글 (337)
Nellie's Blog
배운점 DI(Dependency Injection) DI(Dependency Injection)란 스프링이 다른 프레임워크와 차별화되어 제공하는 의존 관계 주입 기능으로, 객체를 직접 생성하는 게 아니라 외부에서 생성한 후 주입 시켜주는 방식이다. DI(의존성 주입)를 통해서 모듈 간의 결합도가 낮아지고 유연성이 높아진다. 첫번째 방법은 A객체가 B와 C객체를 New 생성자를 통해서 직접 생성하는 방법이고, 두번째 방법은 외부에서 생성 된 객체를 setter()를 통해 사용하는 방법이다. 이러한 두번째 방식이 의존성 주입의 예시인데, A 객체에서 B, C객체를 사용(의존)할 때 A 객체에서 직접 생성 하는 것이 아니라 외부(IOC컨테이너)에서 생성된 B, C객체를 조립(주입)시켜 setter 혹은 생성자..
배운점 엔티티 연관관계 매핑 다중성 다대일(@ManyToOne) 일대다(@OneToMany) 일대일(@OneToOne) 다대다(@ManyToMany) 단방향, 양방향 단방향: 객체 관계에서 한쪽만 참조 양방향: 객체 관계에서 양쪽이 서로 참조 연관관계의 주인 두 객체 연관관계 중 외래 키를 관리하는 쪽을 주인이라 함 외래 키를 가진 테이블과 매핑한 엔티티를 보통 연관관계의 주인으로 선택 주인이 아닌 방향은 외래 키 변경 불가, 읽기만 가능 주인이 아닌 쪽은 mappedBy 속성을 사용하여 주인 필드 이름을 값으로 입력 느낀점 엔티티 연관관계를 공부했다. 모호했는데 조금씩 개념이 잡혀가는 것 같다. https://mjmjmj98.tistory.com/152
학습 과제의 목표 Java를 활용하여 필요한 클래스를 구상할 수 있어요. Lombok과 JPA를 이용하여 원하는 데이터베이스를 만들고 활용할 수 있어요. Spring Boot를 기반으로 CRUD(Create, Read, Update, Delete) 기능이 포함된 REST API를 만들 수 있어요. 과제 주의사항 Entity를 그대로 반환하지 말고, DTO에 담아서 반환해주세요! 프론트엔드와 백엔드가 느슨하게 결합하는 환경이 ”최근에는” 더 일반적이라고 말씀드렸죠? 앞으로 남은 강의 예제와 실습에서는 html/css/js 즉 뷰도 같이 반환 하겠지만, 과제에는 여러분들이 서버 로직에 더 집중하실 수 있도록 JSON을 반환하는 API형태로 진행하려고 합니다. 눈으로 직접 확인 할 수 있었던 view와는 다르..
트러블슈팅 1. 블로그에서 postman 으로 post요청시 시간이 null 값으로 나오는 문제 → @SpringBootApplication 이 있는 class 에 @EnableJpaAuditing 추가를 안해줘서 생긴 문제!!! 2. 커밋할 때 히스토리가 꼬여서 Couldn't add remote: remote origin already exists 에러 발생 → 인텔리제이 터미널창에서 git push -f origin master 명령어로 강제 푸쉬로 해결함 (경로를 하나로 합쳐줌) 리드미 파일을 추가한 후, 풀을 당겨줘야 히스토리 꼬이지 않는다. 항상 풀을 먼저 하고 작업을 하자!!!! 느낀점 입문주차 과제를 다시 써보며 복습했다. 숙련주차 과제를 하기 전에, 다시 정리를 안하면 머리속이 너무 꼬일..
배운점 영속성 컨텍스트 엔티티매니저에는 공유하면 안되는 특정 리소스나 정보가 있고, 여러 스레드가 하나의 엔티티 매니저를 이용 할 수 없도록 처리해야 한다. 그래서 엔티티 매니저 팩토리에서 필요 할 때 마다 여러개의 엔티티매니저를 생성하는 구조로 설계한다. 엔티티 매니저마다 개별적으로 부여되는, 어떠한 논리적 공간같은 개념이다. 자바의 엔티티 객체를 엔티티 매니저마다 가지고 있는 영속성 컨텍스트라는 공간에다 넣고 빼고 하면서 사용한다. “영속화 한다” 라는 말은, “엔티티 매니저가 자기의 영속성 컨텍스트에 넣어준다”와 같은 의미이다. 1차 캐시라는 것을 가지고 있다. 굳이 여러번 DB를 방문하지 않도록. “쓰기 지연 SQL 저장소”가 있다. 역시 굳이 여러번 DB를 방문하지 않도록. DirtyChecki..
배운점 어떤 상황에서 어떤 Request를 쓰나? @RequestParam : URI 경로에서 값을 추출 URI에 이어지는 '?' 뒤에 key1=value1&key2=value2& 형태(Query String)에서 값을 추출. @PathVariable : URI 경로에서 값을 추출 (대분류/중분류/소분류) 의 형태로 작성. @RequestBody : URI경로에서 데이터를 받을 수 없는 경우 필요로 하는 클래스 및 getter method가 선언되어있다면 자동으로 데이터를 받아와 객체 생성 Json(application/json) 형태의 HTTP Body를 Java Object로 변환 @ModelAttribute URI경로에서 데이터를 받을 수 없는 경우 외부 데이터가 bean에 등록된 객체로 자동 변환..
배운점 @Transactional 어노테이션 @Transactional은 클래스나 메서드에 붙여줄 경우, 해당 범위 내 메서드가 트랜잭션이 되도록 보장해준다. 선언적 트랜잭션이라고도 하는데, 직접 객체를 만들 필요 없이 선언만으로도 관리를 용이하게 해주기 때문. 특히나 SpringBoot에서는 선언적 트랜잭션에 필요한 여러 설정이 이미 되어있는 탓에, 더 쉽게 사용할 수 있다. 연산이 고립되어, 다른 연산과의 혼선으로 인해 잘못된 값을 가져오는 경우가 방지된다. 연산의 원자성이 보장되어, 연산이 도중에 실패할 경우 변경사항이 Commit되지 않는다. 위의 속성이 보장되기 때문에, 해당 메서드를 실행하는 도중 메서드 값을 수정/삭제하려는 시도가 들어와도 , 값의 신뢰성이 보장된다. 또한, 연산 도중 오류가..
1-3. JPA기초 Member.java / Food.java / Orders.java Restaurant.java 1. foods 리스트 생성 및 saveAll로 저장 2. members 리스트 생성 및 saveAll로 저장 3. memberRepository에서 findMembers변수로 findAll로 출력(저장된 것 확인) 4. foodRepository에서 findFoods변수로 findAll로 출력(저장된 것 확인) 5. orderList 리스트 생성 및 saveAll로 저장 6. ordersRepository에서 orderList변수로 findAll로 출력(저장된 것 확인) - for문으로 사람&음식 하나하나 출력 7. memberRepository에서 samsik변수로 findById로 삼..
배운점 Entity란? Entity 클래스는 DB의 테이블에 존재하는 Column들을 필드로 가지는 객체를 말한다. Entity는 DB의 테이블과 1대 1로 대응된다. JPA를 사용할 때 Entity 클래스에는 @Entity 어노테이션을 붙여서 Entity임을 명시해 줘야 하며, 내부의 필드에는 @Column, @Id 어노테이션 등을 사용한다. Entity는 외부에서 최대한 Entity의 Getter를 사용하지 않도록 내부에 로직을 구현하는데, 이 때 Domain 로직만 구현하고 Presentation 로직은 구현하지 않는다. Entity의 Getter 사용을 최대한 피하라고 했지만, 기본적으로 Entity를 만들 때 Getter는 만들어줘야 한다. 그런데 이동욱님이 쓰신 책을 보니, Entity 클래스..
오늘은 번아웃이 와서 공부를 거의 못했다. 정말 반성해야겠다. 그래도 암기노트 보면서 배웠던 것을 복습했다. 항해99 우리C반에 55명정도가 있었던거같은데 벌써 38명이다. 17명이 탈주했나보다. 미리 3개월 예습하고 온 나도 이렇게 종종번아웃이 오는데 처음접하는 사람은 많이 힘들것같다.. 내일부터는 제대로 하자. 제발..정신차리자!!!
문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자의 일부 자릿수를 영단어로 바꾸는 예시입니다. 1478 → "one4seveneight" 234567 → "23four5six7" 10203 → "1zerotwozero3" 이렇게 숫자의 일부 자릿수가 영단어로 바뀌어졌거나, 혹은 바뀌지 않고 그대로인 문자열 s가 매개변수로 주어집니다. s가 의미하는 원래 숫자를 return 하도록 solution 함수를 완성해주세요. 참고로 각 숫자에 대응되는 영단어는 다음 표와 같습니다. 숫자영단어 0 zero 1 one 2 two 3 three 4 four 5 five 6 six 7 s..
선형탐색 (Linear Search)라는것을 배웠다. 생각없이 contains나 replaceAll을쓰면 CPU도 엄청 잡아먹고, 성능도 느려지기 때문에 웬만하면 선형탐색으로 알고리즘을 짜도록 하자! https://yeees.tistory.com/87 [프로그래머스][코딩테스트 연습] 숫자 문자열과 영단어 문제 설명 네오와 프로도가 숫자놀이를 하고 있습니다. 네오가 프로도에게 숫자를 건넬 때 일부 자릿수를 영단어로 바꾼 카드를 건네주면 프로도는 원래 숫자를 찾는 게임입니다. 다음은 숫자 yeees.tistory.com
일주일동안 공부했던 알고리즘을 테스트 하는 날이었다. 알고리즘 테스트 2문제를 30분만에 풀고 나왔다. 모의고사 보다는 쉬웠다. https://www.youtube.com/watch?v=ye71-z33-Xc
오늘 공부한 내용 어제 풀었던 모의고사 문제 중 , 3번 소수의 개수와 덧셈문제를 팀원들끼리 다같이 풀어봤다. 어려워서 다들 끙끙대다가 기술매니저님께 여쭤봤다. 3번. 소수의 개수와 덧셈 (상) 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다. 제한사항 s에는 둘 이상의 정수가 공백으로 구분되어 있습니다. 문자열에는 소수가 한개 이상 섞여 있습니다. 문자열에는 소수가 아닌 수가 한개 이상 섞여 있습니다. 음수는 ..
3번. 소수의 개수와 덧셈 (상) 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 소수의 최대값과 소수가 아닌 수의 최소값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 "2 3 4 5"라면 "4 5"를 리턴하고, "15 3 10 9 7 8"라면 "8 7"을 리턴하면 됩니다. 제한사항 s에는 둘 이상의 정수가 공백으로 구분되어 있습니다. 문자열에는 소수가 한개 이상 섞여 있습니다. 문자열에는 소수가 아닌 수가 한개 이상 섞여 있습니다. 음수는 없습니다. 답안포맷 public class Main { public String solution(String s) { String answer = ""; retu..
오늘 공부한 내용 https://yeees.tistory.com/80 https://www.youtube.com/watch?v=RUZ34bNB1AA 신대륙 발견 문제를 풀었는데, 생각보다 손이 많이 갔다. 나는 날짜를 일일이 다 카운트 해서 다시 합산하는 방식으로 코드를 작성했다. 그런데 Calendar, Date클래스를 알았다면 간단하게 풀 수 있었던 문제였다. Calendar, Date 클래스에 관하여 공부했다. 느낀점 코딩테스트는 매일매일 한문제씩 꾸준히 풀어야 한다고 한다.. 첫술에 배부르고 싶어하지 말자!
문제 설명 1937년 Collatz란 사람에 의해 제기된 이 추측은, 주어진 수가 1이 될 때까지 다음 작업을 반복하면, 모든 수를 1로 만들 수 있다는 추측입니다. 작업은 다음과 같습니다. 1-1. 입력된 수가 짝수라면 2로 나눕니다. 1-2. 입력된 수가 홀수라면 3을 곱하고 1을 더합니다. 2. 결과로 나온 수에 같은 작업을 1이 될 때까지 반복합니다. 예를 들어, 주어진 수가 6이라면 6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1 이 되어 총 8번 만에 1이 됩니다. 위 작업을 몇 번이나 반복해야 하는지 반환하는 함수, solution을 완성해 주세요. 단, 주어진 수가 1인 경우에는 0을, 작업을 500번 반복할 때까지 1이 되지 않는다면 –1을 반환해 주세요. 제한 사항 입력..
1번. 신대륙 발견 기원이는 오늘 항해99를 시작했다. 성격이 급한 기원이는 항해 1일 차부터 언제 수료를 하게될 지 궁금하다. 항해 1일 차 날짜를 입력하면 98일 이후 항해를 수료하게 되는 날짜를 계산해주는 알고리즘을 만들어보자. 제한 조건 1 ≤ month ≤ 12 1 ≤ day ≤ 31 (2월은 28일로 고정합니다, 즉 윤일은 고려하지 않습니다.) 아래 답안 포맷을 참고하여 답안을 작성해주시기 바랍니다 public class Main { public String solution(int month, int day) { String answer = ""; return answer; } public static void main(String[] args) { Main method = new Main()..
문제 설명 정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1]인 경우는 [4,3,2]를 리턴 하고, [10]면 [-1]을 리턴 합니다. 제한 조건 arr은 길이 1 이상인 배열입니다. 인덱스 i, j에 대해 i ≠ j이면 arr[i] ≠ arr[j] 입니다. 입출력 예arrreturn [4,3,2,1] [4,3,2] [10] [-1] - 내 이상한 풀이.. import java.util.*; public class Solution { public int[] solution(int[] arr) { int[] answer = {}; if(a..
알고리즘을 계속 푼다. 10문제 정도 풀었다. 짝수 홀수만 대문자로 만들고 싶으면 인덱스 지정해 줄것. String으로 변환할때 쓰는 valueOf() 문자를 정수형으로 바꿔주려면, -'0' 을 하기 정수를 내림차순으로 배치할때 쓰는 StringBuilder / List사용해도 된다.
문제 설명 자연수 n을 뒤집어 각 자리 숫자를 원소로 가지는 배열 형태로 리턴해주세요. 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴합니다. 제한 조건 n은 10,000,000,000이하인 자연수입니다. 입출력 예nreturn 12345 [5,4,3,2,1] 내 풀이 import java.util.*; public class Solution { public static int[] solution(long n) { String[] arr = String.valueOf(n).split(""); int[] answer = new int[arr.length]; for(int i =0; i< arr.length; i++) { answer[i] = Integer.parseInt(arr[i]); } Arr..
문제 설명 문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요. 제한 사항 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다. 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다. 입출력 예sreturn "try hello world" "TrY HeLlO WoRlD" 입출력 예 설명 "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "..
오늘 공부한 내용 프로그래머스 10문제 가량 풀었다. 배열 관련 문제들 위주로. charAt(), toLowerCase(), REGEX, indexOf() Arrays.asList() 등등그리고 배열을 꼭 new로 지정해줘야 한다는 것!! 느낀점 확실히.. 코테 문제를 푸니 자바 공부를 더 심화있게? 공부할 수 있는 것 같다. 그런데 처음이라서 고전중이다... 더 열심히 하자.!!!
문제 설명 대문자와 소문자가 섞여있는 문자열 s가 주어집니다. s에 'p'의 개수와 'y'의 개수를 비교해 같으면 True, 다르면 False를 return 하는 solution를 완성하세요. 'p', 'y' 모두 하나도 없는 경우는 항상 True를 리턴합니다. 단, 개수를 비교할 때 대문자와 소문자는 구별하지 않습니다. 예를 들어 s가 "pPoooyY"면 true를 return하고 "Pyy"라면 false를 return합니다. 제한사항 문자열 s의 길이 : 50 이하의 자연수 문자열 s는 알파벳으로만 이루어져 있습니다. 입출력 예sanswer "pPoooyY" true "Pyy" false 입출력 예 설명 입출력 예 #1 'p'의 개수 2개, 'y'의 개수 2개로 같으므로 true를 return 합니다..
문제 설명 행렬의 덧셈은 행과 열의 크기가 같은 두 행렬의 같은 행, 같은 열의 값을 서로 더한 결과가 됩니다. 2개의 행렬 arr1과 arr2를 입력받아, 행렬 덧셈의 결과를 반환하는 함수, solution을 완성해주세요. 제한 조건 행렬 arr1, arr2의 행과 열의 길이는 500을 넘지 않습니다. 입출력 예arr1arr2return [[1,2],[2,3]] [[3,4],[5,6]] [[4,6],[7,9]] [[1],[2]] [[3],[4]] [[4],[6]] class Solution { public int[][] solution(int[][] arr1, int[][] arr2) { int[][] answer = {}; return answer; } } 내 틀린 풀이 class Solution {..
x만큼 간격이 있는 n개의 숫자 문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 입출력 예 xnanswer 2 5 [2,4,6,8,10] 4 3 [4,8,12] -4 2 [-4, -8] class Solution { public long[] solution(int x, int n) { long[] answer = {}; return answer; } } 내 답변 class Solution { public static l..
오늘 공부한 내용 substring(int start): start 위치부터 끝까지 문자열 반환 substring(int start, int end): start 위치부터 end 전까지 문자열 반환 느낀점 알고리즘 걷기반/ 달리기반 중 걷기반을 선택했다. 7일동안 28문제를 푸는 것이다. 나는 54문제 풀어야지!!!
내 풀이 class Solution { public static String solution(String s) { String answer = ""; int ansLen = answer.length(); int mid; if(ansLen % 2 == 1) { mid = (ansLen / 2) + 1; String ansMid1 = answer.substring(mid); return ansMid1; }else { mid = (ansLen / 2); String ansMid2 = answer.substring(mid, mid + 2); return ansMid2; } } 매개변수.length () 를 해야하는데, answer.length() 를 했다;;;;;;;;;;;;;;;;;;;; 힌트 얻고 수정한 풀..
1. 다음 코드를 실행하면 출력 결과로 5를 기대했는데 4가 출력되었습니다. 어디에서 잘못 작성된 것일까요? int var1=5; int var2=2; double var3=var1/var2; int var4=(int)(var3*var2); System.out.println(var4); -> 나의 답 int var1=5; int var2=2; double var3=var1/var2; // 5를 2로 나누면 2.5가 되는데, var1과 var2는 int타입이기 때문에 2가 된다. //그런데 var3은 double형식이기 때문에 2.0이 된다. int var4=(int)(var3*var2); // var3과 var2를 곱하면 4.0이 되는데 int로 형변환을 시키면 4가 된다. System.out.print..
오늘 공부한 내용 여기까지 만들다가 에러가 났다 상세페이지로 들어가는 기능을 만들려다 보니 인덱스도 넣어야 하고, jinja를 이용하여 데이터를 html로 넘겨주기도 해야하는데, 시간이 얼마 남지 않았음에도 발표직전까지 꾸역꾸역하다가 에러가 났다.... 배포나 발표 하루 전에는 코드는 웬만하면 건들지 말자는 교훈을 얻었다. 느낀점 상세페이지를 만드려고 욕심내다가 프로젝트 발표 직전에 jinja에러가 났다... 너무 속상했다. 정말정말............ 며칠동안 밤도새고 하루종일했는데......우울했다.