단위 테스트 실습 - 문자열 계산기 다음 요구사항을 JUnit을 활용해 단위 테스트 코드를 추가해 구현한다. 요구사항 사용자가 입력한 문자열 값에 따라 사칙연산을 수행할 수 있는 계산기를 구현해야 한다. 문자열 계산기는 사칙연산의 계산 우선순위가 아닌 입력 값에 따라 계산 순서가 결정된다. 즉, 수학에서는 곱셈, 나눗셈이 덧셈, 뺄셈 보다 먼저 계산해야 하지만 이를 무시한다. 예를 들어 "2 + 3 * 4 / 2"와 같은 문자열을 입력할 경우 2 + 3 * 4 / 2 실행 결과인 10을 출력해야 한다. 힌트 문자열을 입력 받은 후(scanner의 nextLine() 메소드 활용) 빈 공백 문자열을 기준으로 문자들을 분리해야 한다. String value = scanner.nextLine(); String..
비즈니스 요구사항과 설계 회원 회원을 가입하고 조회할 수 있다. 회원은 일반과 VIP 두 가지 등급이 있다. 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다. (미확정) 주문과 할인 정책 회원은 상품을 주문할 수 있다. 회원 등급에 따라 할인 정책을 적용할 수 있다. 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용해달라. (나중에 변경될 수 있다.) 할인 정책은 변경 가능성이 높다. 회사의 기본 할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수도 있다. (미확정) 요구사항을 보면 회원 데이터, 할인 정책 같은 부분은 지금 결정하기 어려운 부분이다. 그렇다고 이런 정책이 결정될 때 까지 개발을 무기..
스프링이란? 스프링의 진짜 핵심 스프링은 자바 언어 기반의 프레임워크 자바 언어의 가장 큰 특징 : 객체 지향 언어 ⭐️ 스프링은 객체 지향 언어가 가진 가장 강력한 특징을 살려내는 프레임워크! 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체 지향 설계의 5가지 원칙 (SOLID) SRP : 단일 책임 원칙 Single Responsibility Principle 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수도 있고 작을 수도 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효과가 적으면 단일 책임 원칙을 잘 따른 것 예) UI 변경, 객체의 생성과 사용을 분리 엄청나게 긴~ 코드에 jsp, sql 등등 모..
2022 회고를 23년에 쓰는 사람.. 많더라구요😊 베짱이 군단에 합류해서 더 늦어지기 전에 씁니다. 작년은 개발도, 개인적인 일도 즐거웠던 날이 많았지만 신경쓸 일도 많아서 종합적으로 큰 이벤트 위주로 쓰겠습니다! 회사와 친해졌다. 여기서 친해졌다는건 업무와 인간관계를 모두 아우르는 말이에요. 아마 이 박명수 짤 좋아하는 사람들 많을거 같은데(ㅋㅋ) 원래 회사생활 하면서 적당히 치고 빠지는 것도 중요하니까 사회인이라면 저게 무슨 마음인지 다 알거라고 생각합니다.ㅎ 먼저 어떻게 일이랑 친해졌는지 말해볼게요. 저는 주로 금융 기관의 콜 인프라를 구축하는 회사를 다녀서 (한마디로 콜센터 앱 구축 ㅎㅎ) 관련 업무 파악이 중요합니다. 뭐 업무 파악 중요한 곳이 아닌데가 어디 있겠냐만... 돈이 관련되어 있다보..
MySQL 에서 통계 쿼리 GROUP BY - COUNT() 를 이용하면 특정 컬럼에 대한 통계값을 구할 수 있습니다. GROUP BY - COUNT() GROUP BY 를 사용하여 구하고자 하는 컬럼을 그룹화 하고, COUNT() 함수를 사용하여 해당 컬럼이 얼마나 많은지 카운트합니다. 예시를 들어보겠습니다. SELECT emotion_id, COUNT(*) as count FROM diary WHERE user_id = 11 AND created_at BETWEEN '2023-01-01 00:00:00' AND '2023-01-07 23:59:59' GROUP BY emotion_id ORDER BY count DESC LIMIT 1; 해당 쿼리문은 다음과 같은 결과값을 구하기 위한 과정입니다. 다이..
에러메세지 java.lang.NullPointerException: Parameter specified as non-null is null: method com.beside.backend.api.controller.v1.member.MemberController.getSignupCount, parameter loginType 어디선가.. 파라미터에 null 으로 값이 들어왔다는 에러 어디서부터 null 이 들어간건지 null...찾으러간다. 원인 기간, 로그인 타입 별 회원가입한 사용자 수에 대한 통계를 내던 도중 발생 !! 기간은 반드시 들어가는 데이터고, 로그인 타입은 선택사항이다. 즉, value 값을 안쓰면 여기서 null 로 넘어간다는 의미. 에러 로그에 맞게 떡하니 여기서 null 값을 넘기고..
document 데이터 insert 하는 방법 { key : value } object 형태로 document 데이터를 insert 한다. insertOne() 으로 한개 데이터 넣기 db.diary.insertOne({ "content" : "재미있는 오늘!", "userId" : 11, "weather" : "sunny", "writtenAt" : "2023-02-18T00:00:00.000Z", "deleted" : false}); insertMany()로 여러개의 데이터 넣기 [ {}, {}, ...] 배열로 데이터를 넣는다. db.diary.insertMany([ { "content" : "hello world", "userId" : 22, "weather" : "cloudy", "written..
kotlin 함수 ?.null { it } where 조건 안에서 특정 파라미터 값을 체크해 데이터 유무에 따라 사용할 수 있다. fun findByIdAndName(id: Long, name:String): List { return from(members) .where(members.id.eq(id), name?.let { members.name.eq(it) }) .fetch() } 코틀린에서 제공하는 함수를 queryDsl 쿼리문 안에서도 사용 가능하다. ?. : null 이 아닐 때 let { } : it 으로 자기 자신을 받아와서 객체의 상태를 변경할 수 있다. ?.let { null이 아닐 때 블럭을 실행한다. }
- Total
- Today
- Yesterday
- 배열
- redisson 분산락
- 자바 어플리케이션 실행 과정
- JPA
- 스프링 스케줄링
- addFilterBefore
- Kotlin
- n+1
- 추상클래스
- Java
- 티스토리챌린지
- Linux
- ChatGPT
- jvm warm-up 전략
- FetchJoin
- bucket4j
- QueryDSL
- 오블완
- Cannot construct instance of
- Spring Security
- MultipleBagFetchException
- port
- Git
- 스프링오류
- junit5
- MongoDB
- array
- checkout
- spring boot 3
- dto 클래스 생성자
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |