일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 해시
- @Component
- git
- 카카오 알고리즘
- 카카오 코테
- C++
- thymeleaf
- 카카오
- nestJS
- python
- nestjs typeorm
- C언어
- 컴포넌트스캔
- 가상면접사례로배우는대규모시스템설계기초
- Spring
- 스프링
- TypeORM
- 알고리즘
- 시스템호출
- 코테
- 파이썬
- 구조체배열
- nestjs auth
- 코딩테스트
- 프로그래머스
- OpenCV
- AWS
- spring boot
- Nodejs
- @Autowired
- Today
- Total
목록# Tech Studies (126)
공부 기록장 💻
gitignore에 새로운 파일명을 적고 적용을 하려고 했을 때,제대로 작동하지 않는 경우가 발생한다. 이는 원격 저장소에 이미 저장되어 있는 파일에 대해,로컬에서 삭제 혹은 gitignore에 적용한다고 해서 원격 저장소에서 삭제가 이루어지지 않기 때문이다.이러한 경우 캐시 되어 있는 파일들을 모두 삭제 후, 다시 적용을 해주어 해결할 수 있다. 다음의 명령어를 사용하면 된다. git rm -r --cached .git add .git commit -m "fixed untracked files" 예를 들어, application.yml 의 파일을 새로 아래 .gitignore에 추가해주었다.application.yml에 중요한 aws 관련 정보들을 추가한 후에 이를 git에 업로드되지 않도록 유의해야..
문제 상황 최근 교내 축제 웹사이트 백엔드 Admin 서버를 Elastic Beanstalk으로, MySQL DB를 RDS로 배포한 후 서비스를 출시한지도 어느덧 약 일주일이라는 시간이 지났다. AWS로부터 점점 RDS 인스턴스 프리티어 만료에 따른 과금 메일이 지속해서 오고 있고 AWS Billing 청구서를 보니 점점 사비로는 감당하기 어려울 정도의 요금이 청구되고 있었다. 결국에 스냅샷을 저장하고 RDS 인스턴스를 삭제하기로 결정하였다. 아래와 같이 삭제를 눌렀는데, 이슈 발생 다음과 같은 이슈가 발생하였다. 삭제 방지 옵션이 활성화되어 있어 곧바로 인스턴스 삭제를 할 수가 없었다. 문제 해결 찾아보니, AWS는 데이터베이스가 예기치 않게 삭제되는 것을 방지하기 위해 인스턴스 구성에 '삭제 방지 활..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
문제 상황 AWS에서 Elastic Beanstalk 환경을 구성하여 Spring Boot 프로젝트를 배포한 후, 배포된 URL로 접속했을 때 아래와 같이 502 Bad Gateway 오류가 나타나는 문제가 발생했다. HTTP 502 상태 코드 (Bad Gateway)는 CloudFront가 요청한 리소스들을 서빙할 수 없음을 나타내는 에러 코드인데 왜 발생하는 것일까? 원인 파악 아래 스택 오버플로에 명쾌한 답이 나와있었는데, ELB의 로드 밸런서의 nginx 가 기본적으로 포트 5000을 가리키고 있는 것이 원인이었다. https://stackoverflow.com/questions/54612962/502-bad-gateway-elastic-beanstalk-spring-boot 502 bad gat..
보호되어 있는 글입니다.
보호되어 있는 글입니다.
자바 ORM 표준 JPA 프로그래밍 - 기본편(인프런) 참고 Flush란? 플러시란, 영속성 컨텍스트의 변경 내용(Insert, Update, Delete 등)을 데이터베이스에 반영하는 것을 말한다. Flush 발생한 경우에는, 1) 변경을 감지하고 2) 수정된 엔티티를 쓰기 지연 SQL 저장소에 등록하고, 3) 쓰기 지연 SQL 저장소의 쿼리들을 데이터베이스에 전송하게 된다. Flush를 수행하는 방법들 em.persist(memberA); em.persist(memberB); em.persist(memberC); // JPQL 실행 query = em.createQuery("select m from Member m", Member.class); List members = query.getResultL..
자바 ORM 표준 JPA 프로그래밍 - 기본편(인프런) 참고 JPA란? JPA는 Java Persistent API의 줄임말로, Java 진영의 ORM 기술 표준이다. 여기서 ORM (Object Relational Mapping) 이란, 객체와 관계형 데이터베이스를 매핑해주는 기술이다. 객체 지향 프로그래밍에서 객체는 객체대로 설계하고, 관계형 DB에서서는 DB, Table 대로 설계했을 때, ORM 프레임워크가 중간에서 이 둘을 연결하는 역할을 한 것이다. JPA와 JDBC JPA는 Java 어플리케이션이 DB와 SQL 문을 통해 연결되는 Connection 기술인 JDBC API와 JVM 사이에서 JDBC API를 보다 더 간단하게 사용할 수 있게 도와주는 중간다리의 역할을 한다. JPA를 왜 사용..
인프런 - 스프링 핵심 원리 기본편 정리 빈 스코프란? 스프링 빈은 스프링 컨테이너의 시작과 함께 생성되어, 스프링 컨테이너가 종료될 때까지 유지된다. 이는 스프링 빈이 기본적으로 싱글톤 스코프로 생성되기 떄문이다. (이전에 싱글톤 패턴이 무엇인지, 그리고 스프링의 싱글톤 컨테이너에 대해 학습한 적이 있다.) 스코프란 빈이 존재할 수 있는 범위를 말하며, 싱글톤 스코프 외에 스프링에서 지원하는 다양한 스코프에 대해 알아보도록 하자. 스프링에서 지원하는 스코프 싱글톤 스코프: 기본 스코프로, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 스코프: 스프링 컨테이너가 프로토타입 빈의 생성, 의존관계 주입까지만 관여하고 더이상 관리하지 않는 매우 짧은 범위의 스코프 웹 관련 스코..
프로젝트를 진행하는 도중, 인터페이스 문서에서 Json 데이터로 Response Body를 보낼 때, json의 key 값에 언더바 문자 '_' 가 들어가는 것을 확인하였다. 오래전에 프론트와 상의하여 API 문서를 만들었을 때에는 DB의 각 칼럼에 데이터들을 저장할 것 까지 고려하여 json 형식의 데이터 key 값으로 underline이 포함되는 것을 크게 개의치 않았다. 하지만 개발을 하면서 바로 DTO를 통해 json 데이터를 전달해야 하는 경우 underline이 포함되는 key에 대해 어떻게 처리를 해야 하나 고민을 하게 되었다. 그러던 중 Jackson annotation에서 제공하는 @JsonProperty 를 이용해 값을 프론트에게 전달할 때, key의 이름을 변경할 수 있다는 것을 알게..
공공데이터포털의 날씨 예보 Open API를 호출하여 진행중인 프로젝트에 적용하는 상황에서, Service Key에 포함되어 있는 ASCII charcater code중 하나인 % 가 인코딩 되는 과정에서 오류가 발생하며 API 호출이 제대로 되지 않는 이슈가 있었다. 부여받은 Encoding용 일반 인증키는 아래와 같다. 중간중간 보이는 % 문자가 계속해서 문제를 발생시켰다. 구글 검색 시 % 문자가 포함된 문장을 검색하면 원하는 결과를 얻기가 어렵다. 결국 ChatGPT를 활용하여 답을 얻고자 했다. 역시나 원하는 결과를 얻을 수 있었다..! Request URL에 포함되어 있는 % 문자를 인코딩 하는 과정에서 %25 로 해석을 하게 되어 자동적으로 %뒤에 25를 붙이게 된다는 내용이었다. 위의 질문..
문제의 원인 알라딘에서 제공하는 Open API 중 키워드를 통한 도서 검색 API, 관심사 카테고리에 따른 도서 목록 API를 이용하여 입력 값에 따른 도서 목록을 보여주는 프로젝트를 진행하는 중, 도서 목록 결과 페이지에서 model의 attribute으로 등록한 회원 정보가 타임리프 문법의 오류로 나타나지 않는 문제가 발생했다. 도서 목록 결과를 조회하기 위해 특정 값을 입력하는 경로는, 현재까지 아래의 두 가지 방식이 있다. 기본적인 회원 정보를 입력하여, 관심사에 따른 추천 도서 목록 추출 키워드 검색을 통한 도서 목록 추출 1. 기본적인 회원 정보를 입력하는 페이지 간단하게 이름, 나이를 비롯한 개인 정보를 입력 및 선택하는 방법이다. 선택된 관심사에 맞게 추천 도서 목록을 반환한 페이지는 다..
보호되어 있는 글입니다.
Git 이란? Git은 형상 관리 도구(Configuration Management Tool) 또는 버전 관리 시스템(Version Control) 중 하나로, 소프트웨어를 개발하는 기업의 핵심 자산인 소스 코드를 효과적으로 관리할 수 있게 해준다. 많은 기업이 SVN에서 Git으로 갈아타고 있는데, Git은 분산형 관리 시스템으로 중앙 서버에서 소스코드와 히스토리를 저장하는 SVN과 달리, Git은 소스 코드를 여러 개발 PC와 저장소에 분산해서 저장한다. 즉 사본을 로컬에서 관리하기 때문에, 속도가 매우 빠르고 중앙 서버에 장애가 발생해도 로컬 저장소에서 commit 할 수 있으며, 로컬 저장소의 복원도 가능하다. Git의 장점 소스코드를 주고 받을 필요 없이, 여러 명이 동시에 작업하는 병렬 개발이..
Thymeleaf Template Engine 문법(img th:src)을 이용해 이미지를 View에 업로드해보자 기존 html 에서 image url 값을 통해 이미지를 시각적으로 나타내기 위해서는 와 같은 형태를 사용했다. Thymeleaf Template Engine을 사용해 이미지를 업로드 할 때는 Thymeleaf 문법을 어떻게 사용해야 할까? String 타입의 url 링크를 받아온 값에 대해, 와 같이 사용해주면 된다. Title 아래와 같이 로컬에서 테스트했을 때, View 결과 화면에서 이미지가 잘 나타나는 것을 확인할 수 있다.
알라딘 도서 검색 Open API를 활용하여 얻은 도서 목록 결과를 List에 담아 View에 전달하기 알라딘 도서 검색 Open API를 이용해 특정 쿼리에 대한 검색 결과로 JSON 형태의 데이터를 받아, 이를 Thymeleaf Template Engine을 이용해 직접 만든 View에 결과를 출력하고자 한다. 각 도서 객체는 "BookSearchResult" 에 담았으며, 이를 List에 담아 전체 도서 목록 결과를 출력해보자. Form 메인 홈에서 query를 입력하는 form은 다음과 같다. /book/result 경로로 GET 요청을 보내는 form이다. 키워드 입력: 완료 Controller Controller은 다음과 같이 작성해주었다. @RequestMapping의 GET 요청을 "/bo..
인프런 - 스프링 핵심 원리 기본편 정리 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면, 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 간단하게 1. 객체 생성 후, 2. 의존 관계 주입 을 하는 라이프사이클을 가진다. (단, 생성자 주입의 경우는 예외이다) 스프링 빈은 객체를 생성하고, 의존 관계 주입이 다 끝난 후에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업(초기 작업 시작)은 의존 관계 주입이 모두 완료되고 난 후에 호출해야 한다. 그러나 의존 관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존 관계 주입이 완료되면 스프링 빈에게 ..
Ubuntu 환경에서 Node.js 설치 여러 방법이 있지만, 우분투의 기본 패키지 관리자인 Apt 를 이용하여 간단하게 우분투 패키지 저장소에 기본으로 들어가 있는 nodejs를 다운받아보자. (다만, 아주 오래된 버전이 설치가 되므로 이 방법은 추천하지 않는다.) $ sudo apt update 2. nodejs 다운로드 $ sudo apt install nodejs 3. 설치 확인 (버전 확인) $ nodejs -v 4.노드 패키지 매니저인 npm 다운로드 $ sudo apt install npm 현재 사용하고 있는 Windows에는 18.21.1 버전의 nodejs를 사용하고 있는 반면, ubuntu 환경에서 위의 apt 를 이용해 설치한 결과 12.22.12 버전의 nodejs가 설치되었다.
인프런 - 스프링 핵심 원리 기본편 정리 스프링 빈의 자동, 수동 등록 방식 그동안 스프링 컨테이너에 스프링 빈을 등록하는 방식 중, 스프링 빈을 자동적으로 등록하는 방식, 수동적으로 등록하는 방식에 대해 학습하였다. 수동 등록의 경우, 직접 new()를 통해 구현 객체를 생성하고, 의존 관계를 직접 주입하여 @Bean 을 이용해 스프링 컨테이너에 각 스프링 빈을 등록하는 java 코드 방식 또는 xml 방식이 있었고, 자동 등록의 경우, @ComponentScan을 통해 @Component 가 붙은 객체들을 스프링 빈으로 자동 등록하고, @Autowired를 통해 의존 관계를 자동적으로 주입하는 컴포넌트 스캔 방식이 있었다. 실무적으로는 어떻게 올바르게 운영하는 것이 좋은가? 편리한 자동 기능을 기본으..