전체 글122 SQLP 준비 1. SQL파싱과 최적화SQL : Structured Query Language ⇒ 구조적 질의 언어 이다.옵티마이저가 프로그래밍을 대신해준다.SQL 최적화SQL 파싱파싱 트리 생성Syntax 체크Sementic 체크SQL 최적화옵티마이저가 생성한것중 최적인것을 선택한다.로우 소스 생성(로우소스 생성기)옵티마이저가 선택한 실행 경로를 실제 실행가능한 프로시저 형태로 포맷팅 한다.SQL 옵티마이저사용자가 원하는 작업을 가장 효율적으로 수행할 수 있는 최적의 액세스 경로를 선택해주는 DBMS의 핵심 엔진이다.실행 계획과 비용옵티 마이저가 실행계획을 선택하는 근거는? cost(비용), 쿼리를 수행하는 동안 발생할것으로 예상되는 I/O횟수 또는 예상 소요시간을 표현한것이다.cost는 예상치이기에 실제 실행시에는.. 카테고리 없음 2024. 9. 1. SQL 레벨업 1장 : DBMS 아키텍처 개요1장 : DBMS 아키텍처 개요DBMS 내부의 기능쿼리 평가 엔진→ 핵심!입력 받은 엔진은 사용자로 부터 입력받은 sql 구문을 분석하고 어떤 순서로 기억장치의 데이터에 접근할지를 결정합니다. 이때 결정 되는 계획을 실행 계획이라 부른다.이 책에서 중요하게 이야기하는 성능과도 깊은 관련이 있는 모듈이다.버퍼 매니저디스크 용량 매니저트랜잭션 매니저와 락 매니저리커버리 매니저2장 : DBMS의 버퍼DBMS와 기억장치의 관계HDD현재 대부분의 dbms는 HDD에 저장한다.2차 기억장치좋은 장점도 나쁜 단점도 없는 매체메모리디스크에 비해 기억 비용이 비싸ㅈ다.데이터 베이스 내부 데이터를 모두 메모리에 올리는것을 불가능 하다.버퍼를 활용한 속도 향상DBMS가 일부라도 데이터를 메모리.. 책 리뷰 2024. 3. 24. Redis pub/sub을 활용하여 채팅서버 구성하기 레디스를 적용했던 이유 기존에 다른 시스템에서 채팅서버를 구성하면서 spring에 내장되어 있는 SimpleBroker(message broker)을 활용한 경험이 있습니다. 하지만 해당 방법은 하나의 서버에 비즈니스 로직과 채팅 로직 모두 동작하여 성능을 낮출 수 있습니다. 또한 만약 서버가 확장된다면 한 서버에 있는 메시지 브로커에서만 동일한 채팅 구독정보를 가지고 있어 확장성에 안 좋다는 문제가 있습니다. 이를 해결하기 위해 저희 팀은 redis pub/sub구조를 활용하여 채팅서버를 사용하였습니다. (근데 만약 레디스 서버에 문제가 생기면 메세지가 유실되는 문제가 발생될 수 있습니다. 또한 지금까지의 구독기록 모두 날아가버리는 일이 발생할 수 있습니다. ) 일단 저희팀은 rabbitMQ와 Redi.. 카테고리 없음 2023. 10. 31. 7장 오류처리 우아하고 고상하게 오류를 처리하는 기법과 고려 사항 몇 가지를 소개한다. 오류 코드보다는 예외를 사용해라 오류가 발생하면 예외를 던지는 것이 낫다. 그러면 호출자 코드가 더 깔끔해진다. 논리가 오류 처리 코드와 뒤 섞이지 않으니까. public class DeviceController { DeviceHandle handle = getHandle(DEV1); if (handle != DeviceHandle.INVALID) { retrieveDeviceRecord(handle); if (record.getStatus() != DEVICE_SUSPENDED) { closeDevice(handle); } else { logger.log("Device suspended. Unable to shut down"); .. 책 리뷰/클린코드 2023. 10. 14. multiparit/form-data폼데이터로 json을 보내는 경우 테스트 하는 방법(postman, swagger, mocktest) 스웨거 테스트를 진행하면서 mutlipart formdata를 사용할 때 사진 파일과 json파일은 동시에 보내는 경우를 어떻게 테스트하는지 알아봤습니다. 1. 포스트맨 포스트맨 에서 테스트 하는 경우는 Formdata와 함께 json 파일을 보내는 경우 content type을 지정해서 전송할 수 있습니다. 아래와 같이 전송됩니다. 2.swagger 해당 부분을 swagger로 해결하는 방법은 두 가지가 있습니다. 1. file로 받는 방법 @Operation(summary = "피드 작성") @PostMapping(consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE}) public ApiResponse sa.. 카테고리 없음 2023. 8. 22. 타임리프 레이아웃설정 검색하다 보니 타임리프 레이아웃관련 블로그글이 별로 없어 기록해두려 작성하였습니다. 설정파일들 0. 의존성 주입 (build.gradle) // Layout Dialect implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' 1. Spring boot 빈 설정 (application 파일) @EnableJpaAuditing @SpringBootApplication public class TodoApplication { public static void main(String[] args) { SpringApplication.run(TodoApplication.class, args); } @Bean public LayoutDialect layo.. 카테고리 없음 2023. 8. 21. JPA auditing, baseEntity를 활용하여 Soft delete 구현 지난번 softdelete와 관련한 글을 작성한 적이 있습니다. 그때는 직접 필드를 생성해서 관리해 주는 방식으로 진행했는데 이번 미니 프로젝트에서는 baseEntity에 생성일, 수정일, 삭제일을 입력받도록 수정해 보았습니다. BaseEntity 생성 먼저 baseEntity를 생성했습니다. package com.lahee.market.entity; import jakarta.persistence.Column; import jakarta.persistence.EntityListeners; import jakarta.persistence.MappedSuperclass; import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstru.. JPA/ORM JPA 2023. 8. 9. thymeleaf - boot strap 사용 중 패스워드 글자가 안보이는 경우 인텔리 제이에서는 보이는데 실제 서버를 올리면 password입력시에 글자가 보이지 않는 문제가 있었습니다. 검색 해보니 폰트가 지원을 해주지 못해서 발생하는 문제라는 것을 확인하였습니다. 수정후 실행시키니 잘 입력 되는걸 확인할 수 있었습니다. * { font-family: 'OTWelcomeRA', fantasy; } input[type=password]{ font-family: "굴림", serif; } - 참고로 그래도 실행이 안되신다면 캐시를 지우거나, 시크릿 화면에서도 안되는지 확인해보시면 좋을것 같습니다. 출처 https://devshoveling.tistory.com/entry/input-type-password-%EC%95%88-%EB%B3%B4%EC%9D%B4%EB%8A%94-%ED%9.. 카테고리 없음 2023. 7. 28. 6장 객체와 자료 구조 6장 객체와 자료 구조 변수를 private으로 선언하는데 왜 많은 개발자들은 getter와 setter 함수를 public으로 하는 걸까 만약 get, set함수를 제공한다면 구현을 외부로 노출하는 것과 같다. 자료 추상화 변수 사이에 함수라는 계층을 넣는다고 구현이 저절로 감춰지지는 않는다 구현을 감추려면 추상화가 필요하다. 개발자는 객체가 포함하는 자료를 표현할 가장 좋은 방법을 신중하게 고민해야 한다. 아무 생각 없이 조회/설정 함수를 추가하는 방법이 가장 나쁘다 자료/객체 비대칭 객체는 추상화 뒤로 자료를 숨김 채 자료를 다루는 함수만 공개한다. 자료구조는 자료를 그대로 공개하며 별다른 함수는 제공하지 않는다. 두 개념은 사실상 정반대다. 사소한 차이로 보일지 모르지만 그 차이가 미치는 영향은 .. 책 리뷰/클린코드 2023. 7. 25. Socket 통신, 간단한 소켓 채팅 웹 Socket 통신 클라이언트와 서버 간의 TCP 연결을 길게 유지하고 서로 양방향으로 데이터를 전달하게 해주는 통신 규약의 일종이다. HTTP 프로토콜는 stateless 하다면 socket 통신은 지속적인 연결을 유지할 수 있다. 웹 소켓을 이용하여 클라이언트 간의 서버간에 실시간 푸시 알림, 채팅등의 실시간 기능을 지원할 수 있다 TCP 프로토콜위에서 동작하며 네트워크 계층에서 데이터 전송을 보장한다 소켓 통신 초기 연결을 위해서 HTTP를 사용한다. Http 통신 클라이언트가 서버에 요청을 보내고 서버는 클라이언트에 응답을 보내는 단방향 통신이다 클라이언트는 요청을 보내기 전 연결을 맺어야 하고 서버는 요청에 대한 응답을 보낸 후 연결을 종료한다 웹소켓의 동작원리 1. 클라이언트가 서버에 WebSo.. 카테고리 없음 2023. 7. 17. 네이버 API 등록하기(지도 API 등록) 네이버 API를 사용하기 위한 공통 설정 부분 수업 실습 중 네이버 API를 등록하여 지도 API를 사용하는 실습을 하면서 네이버 API등록을 해봤습니다. 먼저 네이버 클라우드 로그인을 진행합니다. 또한, 카드등록도 진행해 주어야 합니다. 무료 건수가 개인이 사용하기에는 충분한 편이라 우선은 걱정 없이 사용가능하다는 강사님의 말씀이 있었습니다. https://www.ncloud.com/ 로그인 후에 콘솔로 접속합니다. (우 상단에 버튼이 있습니다) 이후 좌측 내비게이션 바에서 서비스를 클릭하고 원하는 서비스를 클릭하여 들어갑니다. 저의 경우는 AI.Naver API를 사용해야 해서 해당 부분을 선택했습니다. 클릭 후 아래와 같은 화면으로 전환됩니다. 이후에 Application 등록을 진행합니다. 애플리.. 카테고리 없음 2023. 7. 14. 부트스트랩,타임리프 Pagination 모듈 사용한 부트 스트랩 버전 1. 페이지를 모두 식별할 수 있도록 하는 경우 첫 페이지 마지막 페이지에서는 가 disable 된다. « » 2. 한 페이지씩 넘겨지는 방법 « » 스프링부트 코드 컨트롤러 @GetMapping("/home") public String home(Authentication authentication, Model model , @RequestParam(defaultValue = "0") int page , @RequestParam(defaultValue = "10") int limit) { Page messages = guestBookMessageService.findByPage(page, limit); model.addAttribute("messages", messages); r.. 카테고리 없음 2023. 7. 14. 이전 1 2 3 4 ··· 11 다음