[백준/7576] 토마토
·
PS/BOJ&Programmers
토마토 7576번: 토마토 첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토 www.acmicpc.net 알고리즘 일반적인 그래프 탐색과 달리, 입력된 초기 그래프에서 1이 있는 곳을 동시에 인접 지역을 탐색해야 한다. 즉, 시작점이 여러 개다. 시작점을 미리 queue에 넣어서 방문할 수 있도록 한다. 1이 있는 지점을 방문하면서 인접 장소를 탐색한다. 이때 익지 않은 토마토가 있다면 방문하고, 몇 번째 날짜인지 기록한다. 이 부분을 print로 찍어보면 다음과 같이 나온다. 일단 queue에 익은 토마토(1)의 위치를 모두 append 해..
[프로그래머스] 조건에 부합하는 중고거래 댓글 조회하기
·
PS/BOJ&Programmers
문제 USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요. 결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고, 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요. sql 문제를 풀 때는 원하는 결과값이 어떤 것인지?에 대해 먼저 파악해야 한다. 그리고 이 결과를 도출하기 위한 세부적인 연산에 대해 고민한다. 먼저, BOARD 테이블은 게시글에 대한 정보를 담고 있고, REPLY 테이블은 그 게시물의 첨부파일 정보를 담고 있다.(쉽게 생각해서 댓글이다. REPLY 테이블의 필드값을 통해 유추할 수 있다.) 이러한 정보를 보..
[SQL] JOIN
·
DB/SQL
개요 데이터베이스를 관리할 때는 데이터베이스 품질 보장을 위해 정규화(관계형 스키마를 세분화하는 것)를 한다. 이렇게 세분화된 테이블들은 연결되어 사용해야 하는 경우가 있다. 예를 들어, 학생 정보 테이블과 학과 정보 테이블이 정규화에 의해 분리되었고 학생의 학과 정보를 위해 두 테이블을 연결하여 정보를 얻는다. 이러한 연결을 위한 연산이 JOIN이다. JOIN 종류 카티션 곱(Cartesian Product): 모든 행에 대한 조인(합집합) 동등 조인(equi join): 공통 속성을 기준으로 같은 값을 가지는 행 조회(교집합) 비동등 조인(non-equi join): 공통 속성을 기준으로 >, =,
[프로그래머스] 조건에 맞는 도서 리스트 출력하기 | DATE
·
PS/BOJ&Programmers
DATE SQL의 DATE 타입은 YYYY-MM-DD hh:mm:ss 형식이다. select 문에서 DATE(datetype_record) 이렇게 사용하면 YYYY-MM-DD 부분만 추출한다. DATE_FORMAT으로 기본값인 YYYY-MM-DD hh:mm:ss를 변경할 수 있다. DATE Format 2024-02-01 18:31:45 날짜 및 요일 포맷 형식 결과값 %Y 2000 %y 00 %M February %b Feb %m 02 %d 01 %e 1 %a Thu 시간 포맷 형식 결과값 %H 18(24시간) %h 6(12시간) %i 31(분) %s / %S 45(초) %m 02 해당 문제는 시간을 제외하고 날짜를 'yyyy-mm-dd' 데이터를 출력해야 하므로, SQL문은 다음과 같다. date_f..
[OS] Synchronous, Asynchronous, Blocking, Non-Blocking
·
CS/OS
개요 Synchronous & Asynchronous | Blocking & Non-Blocking의 개념과 실제로 어떻게 활용하는지, 네 개념의 상관관계는 어떻게되는지 정리하는 포스팅이다. Synchronous Sync 프로세스들은 서로 실행 시점에 따라 순서를 가지고, 순차적으로 실행이 된다. 아래와 같은 Java 예제 코드와 Synchronous한 동작 과정은 다음과 같다. public class Person { private String name; public Person(String name) { this.name = name; } public void introduce() { System.out.println("Hello, my name is " + name + "."); } } public ..
[OS] user mode & kernel mode
·
CS/OS
개요 운영체제는 응용 프로그램과 하드웨어 간의 상호작용을 관리하고, 리소스를 효율적으로 활용하기 위한 다양한 작업을 한다. 이 작업에 대한 방식을 두 가지(유저 모드와 커널 모드)로 나누어, 컴퓨터 자원을 안정적으로 보호한다. 이 두 가지 작업 모드에 대해서 알아보자. Kernel이란 커널은 OS의 핵심이되는 프로그램으로, 시스템의 모든 것(하드웨어의 동작, 메모리, CPU 등)을 제어한다. 프로세스 간 통신과 System Call을 이용하여, 하드웨어 리소스에 접근하여 수행되는 응용 프로그램과 데이터 처리 사이의 중간다리 역할을 한다. 커널에는 모든 활성 프로세스를 추적하는 프로세스 테이블이 있어, 이들을 관리한다. 커널은 OS가 로드되면 메모리에 먼저 로드되고, OS가 종료될 때까지 메모리에 남아있다..
[GCP] GCP 로드 밸런서와 Cloud NAT 구축
·
DevOps/GCP
개요회사 서버 개편 작업을 위해서 다음과 같은 작업을 수행하였다.Instance Template, Instance Group 생성 (https://cobinding.tistory.com/229)Cloud NAT Gateway 구축 (https://cobinding.tistory.com/244)  [GCP] Cloud Nat Gateway 구축 과정 및 작동 방식요구사항 서버 상황 현재 VM 인스턴스의 외부 ip는 임시 ip로 되어있다. 배포는 수동으로 “인스턴스 바꾸기”를 통해서 새로운 인스턴스 이름과 ip를 부여받는 방식으로 운영하고 있다. 인스턴스cobinding.tistory.com [GCP] Instance Template과 Instance Group을 통한 VM 서버 생성과 블루-그린 배포개요 ..
[GCP] Cloud NAT 구축 과정 및 작동 방식
·
DevOps/GCP
개요서버 상황배포는 “인스턴스 바꾸기”를 통해서 새로운 인스턴스 이름과 ip를 부여받는 방식으로 운영하고 있다.인스턴스 바꾸기를 통해 인스턴스를 삭제하고 교체하면, 인스턴스의 외부 ip도 인스턴스가 교체될 때마다 달라진다. 문제 상황NICE API 요청을 위해 ip 주소가 바뀔 때마다 화이트리스트에 등록을 해야함VM인스턴스에서 도는 웹사이트는 WebClient를 통해서 NICE 서버와 http 통신을 한다. 이때, VM 인스턴스의 외부 ip가 HTTP 통신 요청 헤더의 host 필드값으로 들어가게 된다. NICE 측에서는 이 요청값을 통해, 화이트리스트에 등록된 IP인지 아닌지 확인을 한다. ➡️ 따라서 IP를 번거롭게 매번 등록해야 한다. 위험성도 높다.인스턴스 바꾸기를 통해 배포가 될 때마다 외부 i..
[GCP] Instance Template과 Instance Group을 통한 VM 서버 생성과 블루-그린 배포
·
DevOps/GCP
개요웹사이트 개편 작업 이후 도입된 외부 API는 요청 헤더값에 우리 웹사이트의 vm 인스턴스 정보가 담긴다. 이러한 VM 인스턴스 IP 주소는 유동 IP로 설정되어있어서, IP가 변경될 때마다(배포할 때마다 - 블루∙그린배포) 매번 VM 인스턴스의 IP를 화이트리스트에 업로드해야 한다. 이러한 수동 업데이트 방식은 문제의 소지가 다분하다.  이 문제를 해결하기 위한 개편작업을 담당하였다. 그 과정을 시리즈로 블로그에 정리해보려 한다. 이 포스팅은 그 시작점인 Instance Template의 설정과 MIG이다.  Instance Template Instance Template은 MIG를 통해 서버를 운영하기 위해서 가상머신 생성을 위한 일종의 규칙 사항들을 정리해 놓은 것이다.GCP의 Instance ..
[DB] TRUNCATE, DELETE | RDBMS 삭제 명령어 비교
·
DB/SQL
개요 로컬에 더미로 쌓아둔 데이터가 너무 많고 난잡해서 database 값들을 초기화했는데.. 여기서 문제가 생겼다. 현재 Table 구조는 상당히 복잡하게 연관관계가 매핑되어있다. 예를 들어, 유저가 회원가입을 하면 account 테이블이 생성되고, 이와 관련하여 account_a, account_b, account_c… 이런식으로 관계가 정의되어 있기에 update나 insert, delete 등의 명령어는 주의해서 사용해야 한다. 나처럼 무심코 정리했다간 에러지옥에 파묻힐것이다ㅠ.ㅠ 실서버나 staging과 같은 테스트 서버에 데이터를 쉽게/자주 조작하면 안되겠지만, local은 테스트를 위해 이런저런 작업을 하게된다. 이때 무심코 delete를 하기보다는… truncate라는 명령어를 사용하는 것..
[GCP] Google Cloud SDK 활용편
·
카테고리 없음
개요 GCP를 쓴다면 gcloud CLI를 잘 다루는 건 필수임을 느끼는 요즘이다.. 세팅 방법은 Google Cloud SDK 설치 및 세팅 편에 잘 나와있다. [GCP] Google Cloud SDK 설치 및 세팅 개요 Google Artifact Registry 구축기에 Google Cloud SDK 설치 및 세팅 관련 과정을 첨부해서 글을 작성했었는데 이를 따로 빼는 게 맞다고 판단하였다. GAR에만 쓰는 게 아니고 또 GAR 관련 포스팅 해야할 cobinding.tistory.com 이번 편은 설치한 gcloud CLI를 어떤식으로 사용할지 Cloud Build와 함께 정리한다. gcloud CLI 기본 설정 Google Cloud SDK 설치 및 세팅에서 진행한 것처럼 gcloud init, ..
[GCP] Cloud Build 커밋/푸시없이 트리거 실행하기
·
DevOps/GCP
개요Cloud Build 작업을 하면서 트리거 테스트를 위해 계속 커밋을 남겼었다.그런데 공용 Repository에 커밋 및 푸시를 남기지 않고 트리거를 실행하고, 로그를 볼 수 있는 방법을 찾아서 공유한다.GCP는 상대적으로 자료가 많이 없어서 작업이 꽤 힘들다..🥹 GCP를 사용하는 동안 꾸준히 기록해보자!!  Cloud Build 트리거 실행 Cloud Build > 트리거 경로로 들어가서 빌드 테스트를 실행하고 싶은 트리거의 실행 버튼을 누른다.  그럼 위와 같이 트리거를 실행할 트리거 이름과 저장소, 브랜치 입력창이 나온다. 여기서 Cloud Build에 트리거 대상으로 설정해준 브랜치를 입력하고 트리거 실행을 하면된다. 그럼 바로 빌드가 되고 원격 저장소에 commit이 남지 않는다...! ..
[JAVA] Effective Java. 6장 열거 타입과 애너테이션
·
언어/JAVA
개요 회사 업무로 진행하는 이펙티브 자바 세미나 자료 내용이다. 책과 블로그를 참고하였으며, 자세한 코드는 여기서 확인할 수 있다. GitHub - cobinding/effective-java-semina: [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드 [JAVA] 인턴십 업무로 진행한 Effective-JAVA 세미나 코드. Contribute to cobinding/effective-java-semina development by creating an account on GitHub. github.com item34. int 상수 대신 열거 타입을 사용하라 같은 그룹으로 묶이는 int 타입 상수들은 나열하지 말고, enum 클래스를 활용하자. 열거 타입은 그 자체가 클래스이..
[Backend] yaml 파일 작성법
·
Dev/Backend
😮‍💨 새로 CI가 필요한 프로젝트가 있어서 Cloud Build를 구축하는 도충 계속 아래와 같은 에러가 떴다. "failed unmarshalling build config cloudbuild.yaml: yaml: line 3: did not find expected key" yaml 파일 문법 에러가 발생한 것 yaml은 파이썬에서 tab으로 구분하듯이 띄어쓰기가 중요하다. 그런데 이러한 띄어쓰기 적용이 툴마다 달라서,,,, 아니 분명 intelliJ로 빌드할 땐 됐는데 외않되지?만 외치고 있다가 구글링을 통해 꿀정보 찾음 꿀정보는 아래 사이트인데, yaml -> json 변환 사이트로 yaml 문법이 잘못되면 잡아준다. https://www.json2yaml.com/convert-yaml-to-j..
[Redis] Redis 4편. 운영 방식과 호스팅
·
DevOps/DevOps
개요 SpringBoot와 Redis사용법을 redis-cli을 통해 로컬 환경에서 익혔다면, 호스팅 방법과 운영 방식에 대해 공부하고, 결정해보자. 데이터 관리 방식 Redis의 장점은 인메모리 방식으로 모든 데이터를 RAM에 저장하여 입출력 성능을 끌어올리는 것이다. 이러한 장점을 잘 사용하려면 어떤 데이터를, 어떻게 사용할지에 대해 잘 정의하고 이를 관리하는 방식에 대한 정의가 필요하다. 캐싱 전략 레디스 캐싱 전략은 크게 4 가지이다. 보통 읽기/쓰기 패턴을 고려하여 4 가지 전략 중 한 가지를 택하거나 2 가지 이상의 전략을 결합하여 사용한다. 레디스 DB에 쓰기 작업을 진행할 때 주의할 점은 인메모리 데이터베이스 특성상 영속성이 보장되지 않는다는 점이다. 따라서 이러한 데이터의 휘발성을 보완하..
sebinChu
'분류 전체보기' 카테고리의 글 목록 (4 Page)