일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- MYSQL
- softeer
- java
- C++
- 코딩봉사
- 정보처리산업기사
- 백준알고리즘
- SQL
- 코딩교육봉사
- programmers
- 프로그래머스
- 코틀린
- SW봉사
- 알고리즘
- 데이터베이스
- 공부일지
- 파이썬
- 백준
- 백준 알고리즘
- 스프링
- 1과목
- kotlin
- 문제풀이
- 시나공
- BFS
- 회고
- CJ UNIT
- 자바
- python
- 소프티어
- Today
- Total
목록개발 (141)
JIE0025
✅ DB 클러스터링이란? > 단일 데이터베이스를 연결하는 둘이상의 서버/인스턴스를 결합하는 프로세스 아래를 보면 쿼리를 수행하는 서버가 있고, 실제 저장공간인 Database가 있다. 서버를 둘 이상으로 늘려서 단일 Database에 연결하는것이다. ✅ 클러스터링을 하는 이유 만약 DB 서버가 2대가 된다면 어떻게 될까?많은 양의 쿼리문을 더 빠르게 응답할 수 있을것이다. 또한 한개의 서버가 이상이 생기더라도 다른 서버가 존재 하기 때문에 정상적인 서비스를 운영할 수 있다. 단점위 그림을 보면 두 서버가 둘다 Active하다. 이는 두개 서버가 동시에 같은 자원에 접근하려고 할수 있다는 의미가 된다. (병목현상)병목현상이 발생하면 더 많은 비용이 발생할 수 있다. >> Active ..
✅ 문제상황A모듈의 메뉴에서 C모듈의 팝업을 호출한다. C모듈 팝업에서 버튼한개를 클릭하면 공통쪽 팝업이 뜨는데... 여기에서 공통 팝업이 제대로 뜨지 않는 문제가 발생했다. ✅ 해결 과정코드 확인 결과, 공통 팝업을 띄우기 위해선 1. 메뉴인경우 해당 페이지의 정보를 저장한다. --> A모듈 메뉴1 에서 공통팝업 호출시 A의 정보저장 2. 해당 페이지 정보가 없는 경우 (ex 팝업) 그 부모의 정보를 가져와서 저장한다.--> A모듈에 메뉴1에서 A모듈 팝업1을 호출한 다음 공통팝업 호출시 팝업1의 부모인 메뉴1의 정보 저장 문제가 생겼던 부분은 이 경우는 A에서 C팝업을 호출했기 떄문에 부모의 정보를 제대로 가져오지 못하여 발생하는 것이었다. 크로스오리진을 해결하기 위해선 ..
상황1. 모듈A 에서 메뉴 하나를 개발했다.2. 단순조회를 하는데, 모듈A, 모듈B, 모듈C에서 쿼리 결과를 가져와 띄어주는 상황이다. 3. 모듈A에서 B, C로 인터페이스를 요청하여 조회할 내용을 가져온다. 4. 모듈 C에서의 응답에서 에러가 발생하였음 문제정의1. 인터페이스 요청 및 응답까지 1분이상 소요되었다.2. 모듈C의 로컬확인 결과, WAS에서 응답을 잘 돌려주는 것을 보았다. >> 자바/ 쿼리의 문제가 아님>> 대신 응답까지 33초 걸림 3. 인터페이스 중간관리 시스템에서 30초 이상 걸릴 경우호출한 클라이언트 쪽으로 TIME_OUT을 내고 있었다. 따라서 응답 속도를 30초 이내로 만들면 화면에 정상적으로 띄울 수 있다. * 기존쿼리 SELECT COUNT(*) AS CNTFROM (..
개요경영지원 시스템에는 직원들이 더욱 편하게 회사의 지원을 받을 수 있는 메뉴들이 존재한다. 최근 자격증 응시료를 지원받을수 있는 신청 승인 페이지를 개발해 추상적인 내용을 기록해보고자 한다. 자격증 지원금 신청 & 승인 유저플로우(userflow) 일반 사용자 1. 지원받을 자격증정보,응시료 등을 입력하여 정보를 저장한다. 2. 저장한 정보를 신청하면, 상태로 변한다. 이때 관리자에게 알림을 보낸다.3. 신청중인 데이터를 할 수 있다. 관리자1. 일반사용자가 지원금 신청하면, 관리자에게 알림이 온다. 2. 인 데이터를 또는 할 수 있다. 3. 된 데이터는 할 수 있다.4. 된 데이터에 대해 결의서 및 한다. - 다건에 대해선 차변 금액이 합쳐져서 생성된다. 5. 전표 등록이후 ..
. ✅ 개요 이전에 아래와 같은 상황이 발생했었는데... https://jie0025.tistory.com/618 한 트랜잭션에서 동일한 데이터를 조회하면? (MyBatis의 캐싱전략과 localCacheScope 설정하기)✅ 가정 학생이 존재한다. 학생은 학년별로 성적표를 출력할 수 있다. 학년당 2학기가 존재하고, 성적표 또한 학기별로 출력된다. 위의 이미지는 2학년 성적표를 조회하는 상황이다. 1학기, 2학jie0025.tistory.com 정리하자면 한 요청상황에서 (동일 트랜잭션) 파라미터까지 똑같은 쿼리를 할 경우MyBatis 는 내부 캐싱을 사용하고,이에 따라 쿼리와 쿼리사이에서 해당 엔티티의 값이 변경될 경우이후 쿼리 상황에서 바뀐 값으로 출력된다. 이 문제가 Local에서만..
✅ 가정 학생이 존재한다.학생은 학년별로 성적표를 출력할 수 있다.학년당 2학기가 존재하고, 성적표 또한 학기별로 출력된다. 위의 이미지는 2학년 성적표를 조회하는 상황이다. 1학기, 2학기 성적표를 둘다 체크하여 한번에 요청하면한번에 성적표 2개가 보인다. * 1학기 성적표 한개만 체크하면 성적표 1개만 보인다. ✅ 상황한번에 2학년 1학기, 2학기를 성적표를 조회하는 과정은 한 트랜잭션에서 일어난다. 💻 수도코드성적표 객체 생성출력해야하는 개수만큼 반복 학생을 조회한다. 학생의 개인정보가 존재한다면 복호화한다. 해당 학기에 무슨 과목을 들었는지 리스트 생성 Database에서 학생의 성적데이터를 가져오는..
✅ Office Reservation SystemView All Employee Work Status APISeat Reservation APICancel Seat Reservation API ✅ Architecture LanguageKotlinServerSpringBoot **2.7.17Gradle - KotlinDBMySQLSpring Data JPA (Hibernate)QueryDslDocumentSwagger 3.0.0 TestingMockK (Mockiing Library)IntelliJ (Test Coverage) ✅ Detailed Requirements Definition There are a total of 100 seats available (1~100). Each employee ca..
✅ 선행 개념 먼저 비관적 락이 무엇인지에 대한 개념은 아래 글에 적어놓았다. https://jie0025.tistory.com/603 비관적 락은 무엇이고 왜/언제 사용할까? ✅ 비관적 락 ? DB관리에서 사용하는 기술 중 하나이다. 충돌이 발생할 것 같으니 조취를 취하자. 간단하게 설명하면 어떤 이용자 A 가 데이터를 Read/Write할 때, 미리 락(Lock)을 걸어서 다른 사용자 jie0025.tistory.com ✅ 동시에 API 요청 넣어보기 락을 사용하지 않았을때 발생하는 문제를 직접 눈으로 확인해보자. 동시 요청을 보내는 가장 간단한 방법이 있다. ⏺ curl 커맨드 ? CLI를 이용해 API 데이터를 요청할 수 있는, HTTP 클라이언트 도구 중 하나 * GET방식 옵션 없이 아래처럼 ..
✅ QueryDSL 설정하기 1️⃣ build.gradle.kts에 plugins 추가 plugins { //for querydsl kotlin("kapt") version "1.7.10" } 2️⃣ dependencies 추가 이후 dependencies를 추가해주면 되는데, 나는 kapt에서 빨간줄이 뜨길래 plugins만 추가하고, 빌드한번 해준 다음 dependencies를 추가했다. dependencies { //querydsl implementation("com.querydsl:querydsl-jpa:5.0.0") kapt("com.querydsl:querydsl-apt:5.0.0:jpa") } 3️⃣ Build 빌드 성공시 인텔리제이 좌측 상단 build > generated > source..
✅ 개요 Hibernate를 이용한 엔티티 생성을 하다가 해당 내용을 정리할 필요성이 생겨서 가져왔다. 🤔 클래스를 선언할 때 (소괄호)와 {중괄호}는 어떤 역할을 할까? 각 자리에 선언되는 필드들은 어떤차이가 있을까? ✅ 예제 코드 메모라는 엔티티 클래스를 간단하게 만들었다. 소괄호 ( ) 안에 title을 선언, 중괄호 { } 안에 memoId, contents가 선언되어있다. @Entity @Table(name = "memo") class Memo ( @Column(nullable = false, length = 30) var title: String ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "memoId"..