📌𝗩𝗶𝗲𝘄 𝗔𝗹𝗹(33)
-
Apache Tomcat 모니터링 - Manager 사용방법
JVM 의 메모리, 스레드 등의 정보 모니터링이 필요하다면. 간단하게 톰캣에서 기본적으로 제공해주는 Manager를 통해 모니터링할수있다. ## 테스트환경 - mac OS- Apache Tomcat v9.0.95 ## 방법1. Tomcat Manager App 활성화하기 {TOMCAT_HOME}/conf/tomcat-users.xml 수정 2. Tomcat 재시작 {TOMCAT_HOME}/bin ./catalina.sh stop./catalina.sh start 3. 매니저 화면접속 http://localhost:8080/manager 이후, 위에서 설정한 username과 password 로 접속한다.
2024.09.18 -
첫회사, 네번째 팀.. 오히려 좋아.
지금 회사에서 근무한지 벌써 3년차다. 입사하고 그동안 총 세번의 조직개편이 이루어졌다. 다른기업도 이렇게 조직 구조가 자주 바뀌는지는 잘 모르겠지만? 새로운 팀을 만나고 잘 적응해나간다는건 경험상으로, 정말 쉬운일이 아닌게 확실하다. 신입때는 도메인 용어들 익히는게 가장 어려웠던것같다. 회사의 비즈니스 특성상 B2B이고 외산 솔루션을 결합시킨 제품들이 많아서 모르는 말들이 쏟아져나왔다. 구글링해서 안나오는게 있다니. 심지어 아주 많다고!! 특히 나는 웹애플리케이션을 개발하고 유지보수하는 업무를 담당하고있기 때문에 애플리케이션 뒷단에서 일어나고있는 많은 일들, 데이터베이스에 쌓이는 알수없는 데이터들, 매뉴얼 문서를 보고도 와닿지않는 언어들때문에 초반에 많은 혼란을 겪었다. 업무에 익숙해질때쯤 찾아..
2024.07.02 -
[React] 상태를 관리하는 또다른방법, useReducer
리액트 공식문서의 Learn 파트를 읽고 개인적으로 정리하는글 ✍️ https://ko.react.dev/learn/extracting-state-logic-into-a-reducerINDEX. 1. reducer를 사용해야하는 이유 2. useState를 useReducer로 리팩토링하는 방법 3. reducer를 잘 작성하는 방법 4. 내 프로젝트 코드에 적용시켜보기 1. reducer를 사용해야하는 이유reducer가 필요해지는 순간은 다음과같은 상황들이다. 예를들어, 하나의 state를 3가지의 상황에서 업데이트하는 코드가 있다. 아래의 App 컴포넌트에서는 세가지 핸들러에서 각각 state를 업데이트하고있는데, 이런게 점점 많아지면 상태를 업데이트하는 경우들을 한눈에 파악하기 어려워질수가 있다...
2024.07.01 -
프론트엔드 개발에서 Typescript 도입하는 이유와 장점
결론부터 말하자면, TS를 도입하는건 개발 효율성과 프로젝트의 품질향상을 위해서다.개발자가 더 명확하고 정확한 코드를 작성할수 있게 도와주기 때문. 따라서 대규모 프로젝트일수록 타입스크립트 도입은 필수적이다. 타입스크립트의 기본개념과 특징에 대해 알아보고, 프론트엔드 세계에 도입했을시 장점을 세세하게 살펴보자! 1. 타입스크립트 기본 개념과 특징- 타입스크립트는 마이크로소프트가 개발한 자바스크립트에 타입 시스템만 추가한 오픈소스 언어이다. - 정적 타입 지정: 컴파일 시점에 타입 오류를 잡아낼 수 있어 코드의 안정성을 높여준다. 이는 런타임 오류를 줄이고, 개발자가 더 안정적인 코드를 작성할 수 있게 돕는다. 2. 타입스크립트 도입 시 얻는 장점- 향상된 코드품질: 정적 타입 검사를 통해 잠재적인 오류..
2024.06.24 -
[매일을 나아가는법] 쉽게 나이들지 않는 원리에 집중하기
내 분야의 전문가가 되려고 할때. 저자는 그 기술에 대한 원리를 이해하려하고, 공부하는 법을 공부한다고 말했다.새로운 기술을 배올때, 어떻게하면 현업에 필요한 수준까지 빨리 도달할수있는지 고민한다고.다음 내용들이 너무 와닿고 이렇게 성장하는 개발자가 되고싶어서 기록해둔다!기술의 발전은 획기적인 변화보다 문제해결을 위해 우리가 사용할수있는 도구가 다양해지는것을 뜻한다. 서로다른 도구들은 하나의 기술적 문제를 더 편하게 혹은 조금 다른 방식으로 해결하기 위해 계속 업그레이드 된다. 반면 본질적인 아이디어는 시간이 지나도 유효하다. 아무리 사람들이 열광하는 최신도구라도 도구에만 집중하기보다 그 도구가 해결하려는 기술적 문제와 아이디어를 이해하는것이 중요하다. 근본에 집중하자고요!! 최신기술과 변하지않는 원..
2024.06.19 -
[React] Suspense, 비동기 작업의 새로운 접근법
리액트 Suspense 는 비동기작업이 완료될때까지의 대기상태를 관리하는 컴포넌트이다.거기다가 fallback 속성에 지정된 로딩 UI를 넣어주면 간편하게 로딩상태를 보여줄수가 있다! 이걸 몰랐을땐 조건부 렌더링을 통해서 로딩 스피너를 보여주곤 했었는데 Suspense를 사용하면 훨씬 깔끔하게 처리할수있다. 서스펜스에 대해 알아보자!! 1. 배경React Suspense는 React 16.6에서 실험적기능으로 처음 소개되었고, 18부터 정식 출시된 기능이다. 기존에는 로딩상태를 관리하기 위해서 state를 등록하고, 로딩상태냐 아니냐에 따라 조건부 렌더링을 통해 로딩스피너를 보여주는 방식이 일반적이였다. 이 방법은 복잡한 UI일수록 코드가 길어지고, 유지보수가 어려워질수 있다. Suspense는 이런..
2024.06.17 -
javascript 스프레드 연산자 알아보기
ES6 신문법, spread operator 알아보기 1. 스프레드 연산자란? spread operator는 반복 가능한(iterable) 객체에 적용할 수 있는 문법으로, 배열이나 문자열 등을 개별 요소로 분리시킬 수 있다. const arr1 = [1, 2, 3];const arr2 = [...arr1, 4, 5]; 기본 형태는 세개의 점(...) 으로 이루어져있고, 이를 통해 복사, 병합, 추가 등의 작업을 좀더 간단히 수행할수 있다. 2. 사용하는 이유?원본배열 또는 객체를 변경하지 않고 새로운 복사본을 만들기 위해서다. 자바스크립트에서 배열과 객체는 참조에 의해 전달되기 때문에 그냥 대입하면 참조 주소만 복사되어 두 변수가 같은 객체를 가리키게 됨. 스프레드 문법 사용할때 vs 사용안할때 차..
2024.01.29 -
[JS 알고리즘] 프로그래머스 K번째 수
https://programmers.co.kr/learn/courses/30/lessons/42748?language=javascript 코딩테스트 연습 - K번째수[1, 5, 2, 6, 3, 7, 4] [[2, 5, 3], [4, 4, 1], [1, 7, 3]] [5, 6, 3]programmers.co.kr 📍 문제 📍 풀이사용한 메소드는 다음과 같다. slice(start, end): start 인덱스부터 end 인덱스 이전까지 슬라이싱한 배열 반환sort: 정렬메소드 push: 배열 오른쪽으로 원소 추가됨 코드 작성은 어렵지않은데, sort() 정렬부분에서 주의할점이 있다. 만약 다음과같이 sort()만 해주면 오류가 날것이다. 왜냐하면 자바스크립트는 기본적으로 유니코드 문자열을 비교해서 ..
2021.09.16 -
[프로그래머스] 비밀지도 Python (카카오 기출)
https://programmers.co.kr/learn/courses/30/lessons/17681?language=python3 코딩테스트 연습 - [1차] 비밀지도비밀지도 네오는 평소 프로도가 비상금을 숨겨놓는 장소를 알려줄 비밀지도를 손에 넣었다. 그런데 이 비밀지도는 숫자로 암호화되어 있어 위치를 확인하기 위해서는 암호를 해독해야 한다. 다programmers.co.kr풀이과정 요약비트연산자 or을 사용한 연산결과를 이진수로 표현해서 저장한다. 이진수 결과를 하나씩 탐색하면서 1은 #으로, 0은 공백으로 문자열 치환을 해주었다. 전체 코드def solution(n, arr1, arr2): answer = [] dec_arr = list(zip(arr1, arr2)) ..
2021.09.09 -
Python 딕셔너리를 튜플 리스트로 변환
딕셔너리 자료형을 리스트로 변환해야할때 다음과 같이 튜플 리스트로 변환시킬 수 있다. dict = {'a': 4, 'b': 6, 'c': 1}# key, value 값 각각 뽑아내기print(dict.keys()) # dict_keys(['a', 'b', 'c'])print(dict.values()) # dict_values([4, 6, 1])# 딕셔너리를 튜플 리스트로 변환result = list(zip(dict.keys(), dict.values()))print(result) # [('a', 4), ('b', 6), ('c', 1)]# value 기준으로 정렬하기# 오름차순 정렬print(sorted(result, key=lambda x: x[1])) # [('c', 1), ('a', 4), ..
2021.09.07 -
[프로그래머스] 튜플 Python (카카오 기출)
https://programmers.co.kr/learn/courses/30/lessons/64065 코딩테스트 연습 - 튜플"{{2},{2,1},{2,1,3},{2,1,3,4}}" [2, 1, 3, 4] "{{1,2,3},{2,1},{1,2,4,3},{2}}" [2, 1, 3, 4] "{{4,2,3},{3},{2,3,4,1},{2,3}}" [3, 2, 4, 1]programmers.co.kr 풀이과정 중복되는 원소가 없는 튜플을 집합기호로 표현된 입력이 주어진다. 예를들어 튜플이 (2, 1, 3, 4)인 경우{{2}, {2, 1}, {2, 1, 3}, {2, 1, 3, 4}}{{2, 1, 3, 4}, {2}, {2, 1, 3}, {2, 1}}{{1, 2, 3}, {2, 1}, {1, 2, 4, 3}, ..
2021.09.07 -
JS기초 | Ajax, JSON 개념정리 및 활용방법
Ajax란?Ajax는 자바스크립트를 사용해 브라우저가 서버에게 비동기 방식으로 데이터를 요청하고, 서버가 응답한 데이터를 수신하여 웹페이지를 동적으로 갱신하는 프로그래밍 방식이다. Ajax는 XMLHttpRequest 객체를 기반으로 동작하며, http 비동기 통신을 위한 메서드와 프로퍼티를 제공한다. 전통적인 웹페이지의 생명주기 예전의 웹페이지는 완전한 html 태그로 감싸진 html 파일을 서버로부터 전송받아 웹페이지 전체를 처음부터 다시 랜더링 하는 방식으로 동작했다. 따라서 클라이언트가 화면전환을 요청하면, 서버로부터 새로운 html을 전송받아 웹페이지 전체를 다시 새로고침 해야했다. 위와 같이 동작하면 어떤 단점이 있을까?1. 변경될 필요가 없는 부분까지 매번 서버로부터 재전송 받기때문에 불..
2021.08.24 -
Python 딕셔너리 자료형
1. 딕셔너리 쌍 추가, 삭제딕셔너리에 key와 value를 추가하려면 딕셔너리[key] = value 와 같이 입력하면 된다.dict = {1: 'a'}dict[2] = 'b'print(dict) # {1: 'a', 2: 'b'} 요소를 삭제하려면 del을 사용한다. dict = {1: 'a', 2: 'b'}del dict[1]print(dict) # {2: 'b'} 2. key를 사용해 value 얻기 딕셔너리[key]를 사용해 해당 value를 얻을 수 있다. key는 고유한 값이라는 특성이 있어, 겹치지 않게 데이터를 저장하고 얻을 수 있다는 점에서 유용하다.dict = {1: 'a', 2: 'b'}print(dict[1]) # a 만약, 중복된 key값이 있는 경우, 하나의 key를 제외한..
2021.08.18 -
[프로그래머스] 오픈채팅방 (Python)
⭐Level 2 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오programmers.co.kr 코드 (Python)def solution(record): answer = [] dic = {} for i in record: temp = i.split() if temp[0] == "Enter" or temp[0] == "Change": dic[temp[1]] = temp[2] ..
2021.08.13 -
[프로그래머스] 나머지 한 점 (Python)
최근 코딩테스트 데모 예제로 나왔던 문제이다.https://programmers.co.kr/learn/courses/18/lessons/1878 세개의 좌표가 입력으로 들어오고, 직사각형을 만들기 위해서 나머지 한개의 좌표를 찾는 문제이다. 직사각형의 각 변이 x, y축과 평행하고, 세 점을 그려보면 x와 y에서 한번씩만 나온 값의 좌표가 결과값을 갖게된다. 정답 코드def solution(v): # x, y좌표가 들어갈 리스트 x = [] y = [] answer = [] # 이중배열 순회 for i in v: if i[0] not in x: x.append(i[0]) else: x.remove(i[0]) if i[1] not in y: y.append(..
2021.06.24 -
VS Code 단축키 모음
줄, 블럭 이동하는 단축키멀티라인 삭제: ctrl + shift + K라인 위, 아래로 이동: alt + 방향키 커서 관련다중선택 커서: ctrl + alt(또는 shift + alt + 마우스 드래그) 주석 관련한줄씩 주석처리: ctrl + /멀티라인 주석처리: shift + alt + A 탭 관련탭 이동하기: tab반대 방향으로 탭 이동: shift + tab현재 탭 닫기: ctrl + W 기타 단축키 자동 줄바꿈: alt + Z선택 라인으로 이동하기: ctrl + G폰트 사이즈 조절: ctrl + +/-설정화면 열기: ctrl + ,터미널 열기: ctrl + `(백틱)
2021.06.05 -
Javascript 숫자, 문자열 타입, 동적타이핑
1. 숫자타입 특징 자바스크립트는 C나 Java처럼 int, long 같은 숫자타입을 제공하지 않음. 모든 수를 실수로 처리하고, 정수만 표현하는 별도의 타입도 존재하지 않는다. console.log(1 === 1.0); // true 자바스크립트에서는 0으로 나누는것도 표현할 수 있는데, 이때 Infinity라는 값으로 나타낸다. console.log(10 / 0); // Infinity console.log(10 / -0); // -Infinity console.log(1 * 'String'); // NaN 대소문자를 구별하기 때문에 반드시 NaN 그대로 써야함. not-a-number의 뜻을 가진다. 2. 문자타입 특징 문자열은 "", '', `` 이렇게 세가지로 나타낼 수 있는데, 자바스크립트에서..
2021.06.04 -
백준 9095: 1,2,3 더하기 (DP)
https://www.acmicpc.net/problem/9095 9095번: 1, 2, 3 더하기각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 출력한다.www.acmicpc.net특정 숫자를 주어진 정수들의 합으로 나타낼 수 있는 경우의수를 구하는 문제. 다이나믹 프로그래밍 기본문제이다. 정수 4를 1,2,3의 합으로 나타내는 모든 방식은 다음과 같다. 정수 n은 양수이며 11보다 작다고 주어졌으므로 1부터 구해본다면,1을 나타내기 위해서는 1만 필요하기때문에 => 1가지 2를 나타내기 위해서는 (1+1), (2) => 2가지3을 나타내려면 (1+1+1), (1+2), (2+1), (3) => 4가지 예제에서 주어진 4를 나타내기 위해서는 위의 1~3까지의 가지수를 모두 ..
2021.05.31 -
백준 10826: 피보나치 수 4 (DP)
10826번: 피보나치 수 4피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가www.acmicpc.net일반적인 피보나치 수열문제. 아래처럼 재귀로 풀었더니 시간초과가 났다. n = int(input())def fibo(x): if x==0: return 0 elif x==1: return 1 else: return fibo(x-1) + fibo(x-2)print("%d" % fibo(n))재귀로 풀면 정수 x가 커질수록 연산시간이 그만큼 늘어나므로 시간초과가 발생한다다이나믹 프로그래밍으로 풀이하고, 처음에 0..
2021.05.31 -
마크다운에서 링크 새창으로 여는법
현재창에서 열기 [링크이름](링크주소) 새창으로 열기 [링크이름](링크주소){: target="_blank"} {: target="_blank"} example
2021.05.30 -
[자료구조] 데크(Deque)이해하기
1. Deque의 개념과 구조Deque(데크)는 double-ended-queue의 줄임말로, 양방향에서 데이터를 처리할 수 있는 queue형 자료구조이다.아래 그림과 같이, 양방향에서 엘리먼트를 추가, 삭제할 수 있는 양방향 큐라고 생각하면 된다. 2. Deque에 존재하는 메서드 종류 Python에서 deque는 collections라는 모듈안에 deque클래스로 내장되어있다. 가장 기본적인 append() 메서드를 수행하면 다음과 같다. from collections import dequedeq = deque(['a', 'b', 'c'])deq.append('d')print(deq) # deque(['a', 'b', 'c', 'd'])기본 append()를 해주면 위의 예제와 같이 가장 오른..
2021.05.20 -
기술면접 대비 참고사이트 북마크
https://github.com/JaeYeopHan/Interview_Question_for_Beginner JaeYeopHan/Interview_Question_for_Beginner:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginnergithub.com
2021.05.19 -
SQL 면접대비
1. RDBMS란? 관계형 데이터베이스 시스템으로, 테이블기반의 DBMS를 말한다. 데이터 항목간의 관계에 따라 데이터베이스를 구성하고, 엑세스하는 DBMS.이 관계형 데이터베이스에서 데이터들간의 관계를 테이블로 표현하는 것. 2. 데이터베이스 '정규화'(Normalization)란?데이터 중복성을 줄이고, 데이터 무결성을 개선하기 위해 정규형식에 따라 관계형 데이터베이스를 재구성하는 프로세스를 말한다. 3. ER모델이란?개체-관계를 나타내는 모델. 엔티티는 데이터의 개체, 구성요소를 말하고, 관계는 그들간의 관계를 나타낸다. 4. 데이터베이스 트랜잭션이란?데이터베이스 관리시스템 내에서 수행되는 작업단위를 말한다. 트랜잭션은 일반적으로 데이터베이스의 모든 변경을 나타냄.예를들어 트랜잭션이 100개행을 ..
2021.05.17 -
JS | 디스트럭처링 할당 (Destructuring)
'모던 자바스크립트 Deep Dive' (36장)을 읽고 정리한 글입니다 객체를 1개 이상의 변수에 개별적으로 할당하고 싶을때, 객체 리터럴에서 필요한 값만 추출하여 변수에 할당시키는 방식을 Destructuring Assignment, 디스트럭처링 할당이라고 한다. 자바스크립트에서 배열과 객체를 각각 분할해서 변수에 할당시키는 방식을 알아보자. 1. 배열 디스트럭처링 (ES6 기준)const arr = [1, 2, 3];// ES6 배열 디스트럭처링 할당 const [one, two, three] = arr;console.log(one, two, three); // 1 2 3 위의 코드를 보면 변수 one, two, three를 선언하고 배열 arr를 비구조화(디스트럭처링) 하여 변수에 할당시켜 준..
2021.05.12 -
node.js 라이브러리 nodemon
nodemon: js 파일에 변경이 있을때마다 자동으로 서버를 실행시켜주는 라이브러리npm을 이용해서 바로 설치할 수 있다 (-g 옵션을 추가해 글로벌로 설치해준다) npm install -g nodemon 다음과 같이 js파일을 수정하고 저장하면 자동으로 서버가 재실행된다
2021.05.07 -
웹 크롤링 간단예제 | Beautiful Soup 사용법
웹에서 데이터를 크롤링할때, Python 라이브러리인 Beautiful Soup을 통해 원하는 데이터를 가져올 수 있다. 1. 설치환경Python 3.6 2. BeautifulSoup 라이브러리 설치pip install beautifulsoup4 3. 뉴스기사 크롤링IT조선 뉴스 메인페이지를 보면, 기사들이 모두 링크로 걸려있다. 기사의 URL을 수집하기 위해 a태그에서 href를 가져오면 된다. 4. 파이썬 코드 from urllib.request import urlopenfrom bs4 import BeautifulSouphtml = urlopen("http://it.chosun.com/")bsObject = BeautifulSoup(html, "html.parser")for link in bsOb..
2021.04.18 -
Web 기본 지식
URL 입력 후, 일어나는 일들 클라이언트가 브라우저 주소창에 URL을 입력하고 일어나는 일들은?1. URL 해석먼저, 브라우저가 URL을 해석한다. 이때 URL 문법에 맞지 않는다면, 기본 검색엔진으로 검색을 진행하고, 문법에 맞는 경우 URL의 호스트 부분을 인코딩한다. 이때, HSTS(HTTP Strict Transport Security) 목록을 조회하는데, HSTS는 http를 허용하지 않고 https만 허용하는 기능이다. HSTS 목록에 해당 URL이 존재한다면 명시적으로 http를 통해 요청을 해도 브라우저가 이를 https로 요청한다. URL 문법 표현방법protocol: [//[user:password@]host[:port]][/]path[?query][#fragment] 만약 검색창에 ..
2021.04.15 -
Python 공백없이 입력받아 list만들기: strip(), rstrip(), lstrip() 사용법
공백이 포함된 정수형 리스트를 입력받을 때는 split()으로 구분하면 되었는데, 공백없이 연속으로 입력받는 경우에 단순히 split()을 사용하지 않았더니 오류가 났다. 문제 예시예제) 정수 N을 입력받아 거꾸로 출력하는 프로그램을 작성하시오입력 예시) 123456출력 예시) 654321import sysdata = list(map(int,sys.stdin.readline()))for _ in range(len(data)): print(data.pop(), end='')readline()은 한줄씩(라인단위로) 읽어오는 함수이기 때문에 끝에 개행문자 \n이 포함되어 있다따라서 list에 원하지 않는 개행문자가 들어가서 에러가 난것이다. 수정한 코드는 다음과 같다.import sysdata = list..
2021.04.09 -
티스토리 코드블럭 커스터마이징, 폰트 변경방법
1. 코드블럭을 커스터마이징하는 HTML 코드원하는 코드블럭 테마 highlightjs.org/에서 가져오고, 아래 코드를 HTML의 사이에 붙여넣는다. (폰트 커스터마이징, 스크롤 생성, 라인넘버 기능 포함)테마 변경시에는 아래 표시된 부분에 해당 테마명을 붙여넣으면된다이때, 대문자는 소문자로, 띄어쓰기는 '-'를 반드시 넣어줘야한다 2. 코드블럭을 커스터마이징하는 CSS코드기존에는 모든 테이블에 영향을 받아서 UI상에서 표형태로 나타나게 된다.따라서 아래 코드처럼 자식인 테이블이라 지정하고, 그 경우에만 속성을 사용하도록 바꿔준다. .entry-content > table { width:100%; margin-bottom: 22px; border: 1px solid #e6e6e6; ..
2021.02.24 -
Local 프로젝트 GitHub에 올릴때 명령어 정리
git 초기화작업 (.git파일 생성)git init현재 git저장소의 상태 보기git status파일 추가 git add. git add --all git add 파일 삭제 git rm -rf {삭제하고 싶은 폴더나 파일}커밋git commit -m "first commit"깃허브 레퍼지토리에 연결이부분은 처음 레퍼지토리 만들고 복사해오면 된다 git remote add origin {원격 서버주소}잘 연결되었는지 확인 git remote -vpushgit push -u origin master
2021.01.23