young0105의 등록된 링크

 young0105로 등록된 티스토리 포스트 수는 271건입니다.

[Java] IntelliJ (인텔리제이) 단축키 [내부링크]

코드 실행 [Shift] + [F10] 코드 삭제 [Ctrl] + [Y] 코드 복사 [Ctrl] + [D] 코드 이동 [Ctrl] + [Shift] + [방향키]

[Spring Boot] CSRF (사이트 간 요청 위조) [내부링크]

CSRF (사이트 간 요청 위조, Cross Site Request Forgery) - 웹사이트 취약점 공격 - 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위를 특정 웹사이트에 요청하게 하는 공격 - 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태임을 노린 공격 방식 - 사용자가 웹사이트에 로그인한 상태에서, CSRF 공격 코드가 삽입된 페이지를 열음 → 공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단함 → 공격에 노출됨

[Java] 어노테이션 [내부링크]

어노테이션 (Annotation) - 프로그램의 코드에 메타데이터를 추가하는 기능을 제공하는 것 - 컴파일러 or 런타임 시점에 코드를 처리하는 도구들에게 추가적인 정보를 제공함 - 주로 클래스, 메서드, 변수, 매개변수 등에 부착해서 사용됨 - 형식 : @어노테이션(속성1=값1, 속성2=값2, ...) - 코드 가독성 향상 - 자동화된 코드 생성, 테스트, 디버깅 등에 활용 # 빌트인 어노테이션 (Built-in Annotation) - @Override : 상위 클래스나 인터페이스의 메서드를 오버라이드함을 나타냄 - @Deprecated : 해당 요소가 더 이상 사용되지 않음을 나타냄 - @SuppressWarnings : 컴파일러의 경고를 무시하도록 지정함 # 메타 어노테이션 (Meta Annota..

[Java] 리플렉션 (Reflection) [내부링크]

리플렉션 (Reflection) - 프로그램 실행 중에 클래스의 정보를 분석/조작할 수 있는 부분 - 런타임 시점에 동작으로 클래스의 메서드/필드/생성자 등에 접근하고 호출할 수 있음 - 자바의 핵심 기능 - java.lang.reflect 패키지 # 클래스 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 필드 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 메서드 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스 # 생성자 정보 가져오기 HTML 삽입 미리보기할 수 없는 소스

[JSP] 웹 컨테이너 (Web Container) [내부링크]

웹 컨테이너 (서블릿 컨테이너) - JSP와 서블릿이 실행될 수 있는 환경을 제공하는 컴포넌트 - URL에서 서블릿을 찾아 실행하고, 서블릿으로부터 결과를 받아 클라이언트에 전달함 # 주요 기능 1) 통신 지원 · HTTP 등의 프로토콜을 통해 클라이언트와의 통신을 지원함 · 요청을 받아 적절한 서블릿을 실행하고, 그 결과를 클라이언트에게 전송함 2) 서블릿의 생명주기 관리 · 서블릿이 로드되어 초기화되고, 요청을 처리하며, 종료되는 과정을 관리함 3) 멀티스레딩 지원 · 클라이언트의 각 요청을 별도의 스레드로 처리함 → 동시에 여러 클라이언트의 요청을 효율적으로 처리 4) 보안 · SSL/TLS 등의 기능을 통해 보안 통신을 지원함 · 웹 리소스에 대한 접근 제어 등의 보안 기능 제공 5) JSP 지원..

[Java] JVM (Java Virtual Machine) [내부링크]

JVM (Java Virtual Machine) : Java 바이트코드(.class 파일)를 OS에 특화된 코드로 변환하여 실행하는 역할을 하는 가상의 실행 환경 # 주요 역할 1) Java 바이트코드 실행 - Java 소스 코드(.java 파일)는 컴파일러에 의해 Java 바이트코드(.class 파일)로 변환됨 → 바이트코드는 모든 JVM에서 실행될 수 있음 2) 메모리 관리 - 객체의 생성과 가비지 컬렉션을 통한 메모리 해제를 담당함 3) 플랫폼 독립성 - 한 번 작성된 Java 코드가 어떤 플랫폼에서든 실행 가능하도록 함 - 플랫폼에 따라 달라질 수 있는 저수준 세부 사항을 추상화함 → Java 바이트코드가 특정 운영체제/하드웨어에 종속적이지 않게 함 4) 보안 - Java 애플리케이션의 실행을 관..

[Java] Garbage Collection [내부링크]

Garbage Collection : 프로그래밍 언어의 메모리 관리를 자동화하는 역할 - 프로그램이 힙 메모리 영역의 객체들을 더 이상 참조하지 않게 되면, 자동으로 메모리에서 해제됨 - 백그라운드에서 실행되는 Daemon Thread에 속함 - 개발자는 객체의 메모리 해제에 신경을 쓸 필요가 없음 → 메모리 누수 문제 감소 & 더 간결한 프로그래밍 가능 - 프로그램의 안정성 향상 - 단점 : 가비지 컬렉션의 시점과 소요 시간을 정확히 예측하기 어려움 → 고성능 시스템에서는 가비지 컬렉션에 의한 성능 저하를 고려할 것 ⇒ 불필요한 객체 생성 주의 & 객체의 참조를 적절하게 관리

[Java] 객체 지향 프로그래밍 (OOP)과 SOLID 원칙 [내부링크]

객체 지향 프로그래밍 - 프로그램을 '객체'라는 기본 요소로 봄 → 이들 간의 관계를 형성하거나 상호작용함으로써 프로그램을 설계/구현하는 방법론 - 객체 : 데이터 (상태)와 데이터를 처리하는 함수 (행동)를 하나로 묶은 것 # 핵심 원리 1) 캡슐화 (Encapsulation) : 객체의 데이터를 외부로부터 직접 접근할 수 없도록 숨기고, 함수를 통해서만 접근하도록 함 → 객체의 내부 데이터를 보호하고, 객체가 받아들일 수 있는 연산을 제어함 2) 상속 (Inheritance) : 한 클래스의 속성/메서드를 다른 클래스가 물려받는 것 → 코드의 재사용성 향상 & 중복된 코드 축소 3) 다형성 (Polymorphism) : 하나의 메서드/클래스가 있을 때, 이러한 것들이 다양한 방법으로 동작하는 것 ex..

[jQuery] 선택자 [내부링크]

직접 선택자 - 전체 선택자 : $("*") - 아이디 선택자 : $("#아이디명") - 클래스 선택자 : $(".클래스명") - 태그 선택자 : $("태그명") - 그룹 선택자 : $("요소1, 요소2, ..., 요소n") - 종속 선택자 1) 해당 요소 중 class a를 갖는 요소 선택 : $("요소명.a") 2) 해당 요소 중 id a를 갖는 요소 선택 : $("요소명#a") 인접 관계 선택자 # 상위 요소 관련 - 요소 a의 부모 요소 선택 : $("요소a").parent() - 요소 a의 모든 상위 요소 선택 : $("요소a").parents() - 요소 a의 상위 요소 중 요소 b를 모두 선택 : $("요소a").parents("요소b") - 요소 a의 상위 요소 b 중 가장 가까운 요소 선..

[개발 일지] 항공사 Web 개발 프로젝트 - 결과 정리 [내부링크]

# 깃허브 주소 https://github.com/seoyounglee0105/green_airline_project # 설명 PPT # 주요 기능 시연 영상 # 일차별 개발일지 https://young0105.tistory.com/category/Team%20Project/Airlines%20Web%20Project

[개발 일지] 항공사 Web 개발 프로젝트 23~27일차 (06/03~06/07) [내부링크]

관리자용 페이지 # 각 대메뉴별 간단한 메인 페이지 - 회원 탭과 달리, 아래로 내려오는 메뉴가 없어서 필요할 것 같다고 판단함 # 회원 정보 조회 및 회원 강제 탈퇴 # 관리자 정보 조회 및 관리자 등록 회원용 페이지 # 메인 페이지 완성 - 공지사항 최근순 5개 출력 - 자주 묻는 질문 랜덤 5개 출력 # 회원 혜택 및 승급 기준 페이지 # 고객센터 메인 페이지 항공권 마일리지 결제 및 환불 - 마일리지 티켓 가격은 일반 티켓 가격의 0.02배로 설정 - 환불 수수료도 일반 환불 수수료의 0.02배로 설정 기프티콘 이미지 - 마일리지샵에서 사용할 기프티콘 이미지 6월 6일 ~ 6월 7일은 리팩토링 및 CSS 위주로 진행

[개발 일지] 항공사 Web 개발 프로젝트 19~22일차 (05/30~06/02) [내부링크]

회원+비회원 / 관리자 메뉴 분리 - 관리자 레이아웃 분리 - 메뉴를 DB 데이터에 담음 → 선택한 페이지에 따라 보조 메뉴가 출력될 수 있게 함 MySQL로 마이그레이션 대시보드 - 월별 매출액 그래프 : 이번 달을 제외하고, 지난 11개월 간의 매출액 그래프 출력 - 메모 기능 · 각 관리자 계정마다 갖는 개인 메모 공간 · blur 이벤트를 적용해서, 해당 textarea에서 포커스를 벗어날 때마다 내용의 변화가 있다면 memo_tb 갱신 - 이번 달 매출액 - 이번 달 신규 가입 회원 수 - 이번 달 탈퇴 회원 수 - 이번 달에 작성된 고객의 말씀 수 - 처리되지 않은 고객의 말씀 내역 + 링크 - 지난 달 고객의 말씀 유형 비율 - 마일리지샵 인기 브랜드 TOP 5 - 도착지별 이용객 수 순위

[Spring Boot] AJAX 통신 시 데이터를 통일된 방식으로 반환하기 [내부링크]

사전 준비 # ResponseDto 생성 HTML 삽입 미리보기할 수 없는 소스 - statusCode : HTTP 상태 코드 값 - code : 성공 시 1, 실패 시 -1 - resultCode : 성공 시 "success", 실패 시 "fail" → code 또는 resultCode를 사용해서 script단에서 if 문으로 코드를 나눌 수 있음 - messge : alert 창에 사용할 메시지 - data : 반환할 데이터 # code, resultCode는 static 상수로 선언해서 사용 HTML 삽입 미리보기할 수 없는 소스 예시 코드 # 요청을 받은 Controller에서 데이터 반환 HTML 삽입 미리보기할 수 없는 소스 # AJAX 통신을 실행한 script 부분 HTML 삽입 미리보기할..

[개발 일지] 항공사 Web 개발 프로젝트 16~18일차 (05/27~05/29) [내부링크]

환불 신청 - 환불 신청 버튼을 누르면 해당 티켓이 국제선인지 국내선인지 확인하고, 그에 해당하는 환불 수수료를 안내함 - 현재 날짜가 출발일보다 며칠 전인지 확인하고, 적용될 수수료에 배경색을 입혀 표시함 # 환불 수수료 안내 페이지 메인 페이지 상단부 - 항공권 예약 페이지와 연동 완료 - 하단부 (공지사항, 주요 서비스, ...)는 다음주 중에 작업할 예정 항공권 예약 # 유효성 검사 추가 - 현재 로그인된 회원의 나이가 소아/유아에 속한다면 항공권 예약 불가능 - 왕복 항공권에서, 첫 번째 일정이 두 번째 일정보다 이후라면 다시 선택하도록 함 - 왕복 항공권에서, 첫 번째 일정과 두 번째 일정의 운항 시간이 겹친다면 다시 선택하도록 함 # 편의성 추가 - 운항 스케줄 조회 버튼을 눌렀을 때, 자동..

[개발 일지] 항공사 Web 개발 프로젝트 14~15일차 (05/25~05/26) [내부링크]

항공권 구매 내역 - 결제 내역 테이블의 status 컬럼이 1이면 '결제완료', 2이면 '환불처리', 0이면 구매 내역에 출력되지 않음 - 클릭하면 상세 페이지로 이동 항공권 상세 페이지 - 출발일자가 현재일자보다 이후면서, 아직 환불되지 않은 항공권 하단에는 '환불 신청' 버튼 활성화 환불 처리 - 출발일자보다 며칠 전인지에 따라 성인 1인 기준 환불 수수료가 정해짐 - 소아는 성인의 75%만큼의 환불 수수료가 책정됨 (티켓 가격과 동일한 비율) - 유아는 좌석을 점유하지 않으므로, 환불 수수료가 없음 - 실제 공항에서는 '환불 서비스 수수료'를 따로 받지만, 여기서는 고려하지 않음 1) 국내선인 경우 · 날짜와 관계 없이 5,000원으로 책정됨 2) 국제선인 경우 · 90일 이전 : 0원 · 60일..

[개발 일지] 항공사 Web 개발 프로젝트 12~13일차 (05/23~05/24) [내부링크]

결제 기능 완성 - 결제 요청 시 예약 내역, 탑승객 정보, 예약 좌석 내역, 결제 내역 데이터 추가 1) 결제 완료 시 결제 내역의 status를 1로 갱신 2) 결제 실패/취소 시 예약 내역 삭제 → ticket_id에 ON DELETE CASCADE 옵션을 걸어두어서 나머지 관련 데이터들도 삭제됨 - 결제 완료 페이지 생성 # 결제 완료 시 문자 발송 - CoolSMS 활용

[Spring Boot] CoolSMS를 활용한 문자 발송 기능 구현 [내부링크]

https://coolsms.co.kr/ 세상에서 가장 안정적이고 빠른 메시지 발송 플랫폼 - 쿨에스엠에스손쉬운 결제 전용계좌, 신용카드, 계좌이체 등 국내 결제 뿐만 아니라 해용신용카드로 한번의 카드번호 등록으로 자동충전까지 지원합니다. 전용계좌, 신용카드, 계좌이체 등 다양한 결제 방식 coolsms.co.kr # Gradle 의존성 추가HTML 삽입미리보기할 수 없는 소스 코드HTML 삽입미리보기할 수 없는 소스

[개발 일지] 항공사 Web 개발 프로젝트 8~11일차 (05/19~05/22) [내부링크]

항공기별 좌석 배치도 생성 - 항공기 정보 페이지 추가 - 좌석 배치도에 따라 좌석 데이터 추가 좌석 선택 페이지 - 스케줄을 선택하면 그 스케줄에 운항하는 항공기 종류에 따라 좌석 배치가 다르게 나타남 - 앞서 선택한 좌석 등급에 해당하는 좌석만 선택 가능 - 이미 예약된 좌석은 선택 불가능 - 모든 좌석을 선택해야 다음 단계로 넘어갈 수 있음 탑승객 정보 입력 및 결제 정보 페이지 - 선택한 티켓 옵션과 좌석 번호를 보여줌 - 탑승객 정보 입력 · 예약자 본인을 탑승객에 포함 옵션 체크 시, 로그인된 유저의 정보를 불러옴 · 입력한 생년월일이 선택한 연령(성인, 소아, 유아)에 부합하는지 확인 · 입력한 생년월일이 날짜 형식에 부합하는지 확인 · 왕복인 경우, 가는 편과 오는 편에 따라 연령 유형이 ..

[개발 일지] 항공사 Web 개발 프로젝트 5~7일차 (05/16~05/18) [내부링크]

항공권 옵션 선택 # 출발지/도착지 선택 기능 - https://young0105.tistory.com/262 - 반대 취항지에 이미 선택한 공항을 선택하면 alert 메세지를 던지고 실행을 취소함 # 날짜 선택 - datepicker 활용 - 가는 날을 먼저 선택해야 오는 날을 선택할 수 있음 → 가는 날 이전인 날을 선택하면 실행을 취소함 - 오는 날이 입력된 상태에서 가는 날을 수정할 때, 오는 날 이후인 날을 선택하면 실행을 취소함 - 현재 날짜보다 이전 날짜를 선택하면 실행을 취소함 - 왕복 ↔ 편도 선택을 변경할 때, 가는 날은 그대로 남아서 넘어가도록 함 ex) 왕복 : 가는 날 2023-06-13, 오는 날 2023-06-14 → 편도 : 가는 날 2023-06-13 # 나이 계산기 - 생..

[개발 일지] 항공사 Web 개발 프로젝트 4일차 (05/15) [내부링크]

출발지/도착지 선택 기능 # 자동 완성 - AJAX 통신을 이용해서, input에 값을 입력할 때마다 일치하는 공항이 있는지 확인함 - 공항을 클릭하면 출발지/도착지 input 태그에 값이 입력됨 - 공백은 입력되지 않도록 함 (입력될 때마다 공백을 빈 문자열로 변환) # 목록에서 직접 선택 - '전체 공항 조회'를 누르면 전체 지역/공항 목록을 볼 수 있는 모달창이 출력됨 - AJAX 통신을 이용해서, 지역 이름을 누를 때마다 포함되어 있는 공항 목록이 출력됨 - 공항을 클릭하면 출발지/도착지 input 태그에 값이 입력됨 # 출발지 ↔ 도착지 스왑 기능

[개발 일지] 항공사 Web 개발 프로젝트 2~3일차 (05/13~05/14) [내부링크]

동적인 레이아웃 구현 지금까지는 레이아웃을 만들 때 자바스크립트는 전혀 사용하지 않았었는데, 이번에는 활용해보았다. 로그인/로그아웃 기능 구현 예매 기능을 만들 때 회원 정보가 필요해서 비밀번호 인코딩 없이 간단하게 만들어두었다.

[개발 일지] 항공사 Web 개발 프로젝트 1일차 (05/12) [내부링크]

좌석 선택 기능 - 해당 항공 스케줄에 운항하는 비행기에 존재하는 좌석 리스트를 가져와서 출력함 - 구매자가 미리 선택한 좌석 수만큼 선택 가능 - 해당 스케줄에 이미 예약된 좌석은 선택 불가능 - 좌석 선택 시 그 좌석에 대한 데이터를 불러옴 (AJAX 통신) · 좌석 번호 · 좌석 등급 · 가격 - 가격 결정 로직 · 해당 항공 스케줄의 운항 시간에 따라, 이코노미 좌석 기준 가격이 정해짐 · 비즈니스 좌석은 기본 가격의 4배 · todo) 승객의 연령에 따라 가격 조정

[개발 일지] 항공사 Web 개발 프로젝트 0일차 (기획 단계) [내부링크]

팀 프로젝트 주제 항공사 홈페이지 개발 프로젝트 기간 2023/05/12 ~ 2023/06/07 (변동될 수 있음) 깃허브 주소 https://github.com/seoyounglee0105/green_airline_project 데이터베이스 관련 MyBatis 초반에는 H2 Database를 사용하고, 나중에 샘플 데이터가 준비되면 MySQL로 전환할 예정 협업 툴 Jira 국비지원교육 마지막 팀 프로젝트 주제로 항공사 홈페이지를 하게 되었다. 마지막 프로젝트인 만큼, 팀원 모두 자랑할 만한 주요 기능 하나씩은 맡을 수 있게 주요 기능을 4가지 정했다. 주요 기능부터 개발한 후, 자잘한 기능들도 분담해서 진행할 예정이다. 나는 우선 항공권 예약 + 결제 기능을 맡았다. 주요 기능 # 항공권 예약 + 결..

[Spring Boot] 렌더링 방식 (CSR, SSR) [내부링크]

클라이언트와 서버 간의 데이터 처리 방식 # CSR (Client-side Rendering) - 클라이언트 측에서 렌더링을 처리하는 방식 · 클라이언트가 서버로부터 데이터를 받아옴 → JavaScript를 이용해 동적으로 HTML, CSS, JavaScript를 생성함 → 브라우저에서 렌더링함 - 비동기 통신 (AJAX) - 데이터를 받아서 특정 부분만 렌더링함 # SSR (Server-side Rendering) - 서버 측에서 렌더링을 처리하는 방식 - 서버에서 HTML, CSS, JavaScript를 생성함 → 클라이언트는 이를 그대로 받아와 렌더링함 - Controller → jsp 방식 - 렌더링을 마친 후 클라이언트에게 보냄 - 장점 : 초기 로딩 속도가 빠르고 SEO에 용이함 - 단점 : ..

[Spring Boot] 데이터 전송 포맷 : xml / JSON / yml [내부링크]

xml - 태그 형식을 통해 Key와 Value를 구분함 - 태그 안에 태그를 넣어서, 부모-자식 관계 구조를 나타냄 - 단점 : Object와 Array 부분이 xml 포맷 상으로는 구분이 안되는 경우가 있음 JSON - 설명 : https://young0105.tistory.com/136 yml - 설명 : https://young0105.tistory.com/210 # 가독성 비교

[SQL] 커넥션 풀 (Connection Pool) [내부링크]

커넥션 풀 (Connection Pool) - 미리 정해진 개수의 데이터베이스 커넥션을 풀(Pool)에 저장해둠 → 요청이 들어올 때마다 커넥션 풀에서 커넥션을 하나씩 꺼내서 사용함 # 장점 - DB와의 연결을 생성/종료하는 시간/비용 감축 - 불필요한 연결 생성으로 인한 리소스 낭비 감소 - DB 연결을 더욱 효율적으로 관리함 - 성능 향상 (처리 속도 향상) 연결된 프로세스 확인 HTML 삽입 미리보기할 수 없는 소스 - id : 프로세스 아이디 - User : 스레드가 접속하고 있는 MySQL 사용자명 - Host : 사용자 IP 주소 - command : 스레드의 현재 상태 (Sleep, Daemon, Query, Lock) - Time : 프로세스가 현재 커맨드된 상태에서 동작 시간 - Stat..

[JavaScript] 비동기 통신 : AJAX [내부링크]

# 비동기식 통신 방식을 사용하지 않을 경우 - 웹 페이지에서 사용자 입력을 받고, 서버로 데이터를 전송하여 새로운 페이지를 받아옴 → 화면이 깜빡이는 등의 불편한 경험을 제공하며, 데이터량이 많아지면 더욱 느려짐 → 개선 : AJAX AJAX 통신 (Asynchronous JavaScript and XML) - 자바스크립트를 사용하여 비동기적으로 서버와 데이터를 주고받는 기술 - 웹 페이지에서 동적으로 데이터를 가져오거나, 업데이트하는 기술 - 서버와 비동기적으로 데이터를 주고받음 → 필요한 부분만 화면을 갱신함 → 화면 전환이 발생하지 않음 (화면이 깜빡이지 않음) - 자바스크립트를 사용해서 서버에 요청을 보내고, 이에 대한 응답을 처리함 · XMLHttpRequest 객체를 사용하여 서버와 통신함 ..

[JavaScript] 비동기 통신 기초 : Promise 타입 [내부링크]

Promise 객체 - 비동기적으로 실행되는 작업을 처리하고, 그 결과를 콜백 함수 등을 이용해 처리하는 객체 - 어떤 작업의 결과를 반환하는 객체 # Promise의 상태 1) 대기 (Pending) : Promise 객체가 생성되었으나, 아직 처리가 진행되지 않은 상태 2) 이행 (Fulfilled) : Promise 객체가 처리를 완료하여 결과를 반환한 상태 3) 거부 (Rejected) : Promise 객체가 처리를 실패했거나, 오류가 발생한 상태 비동기 작업 처리 - 자바스크립트 엔진은 싱글 스레드로 동작함 Call Stack : 현재 실행 중인 함수를 기록하는 스택 · Java의 스택 메모리와 유사 Message Queue (Task Queue) : 비동기 작업이 완료되었을 때 등록되..

[JavaScript Code] AJAX 통신을 이용해서 데이터 가져오기 [내부링크]

코드 더보기 HTML 삽입 미리보기할 수 없는 소스 실행

[JavaScript Code] toggle() 활용 예제 코드 [내부링크]

HTML 삽입 미리보기할 수 없는 소스

[JavaScript] BOM : document 객체 [내부링크]

document 객체 - 웹 문서에서 태그를 만나면 만들어지는 객체 - HTML 문서 정보를 가지고 있음 노드 접근하기 # 태그 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # id 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # class 선택자 이용 HTML 삽입 미리보기할 수 없는 소스 # 해당 문서의 form에 접근 HTML 삽입 미리보기할 수 없는 소스 # 포함하고 있는 하위 노드에 접근 HTML 삽입 미리보기할 수 없는 소스 # 요소 생성 HTML 삽입 미리보기할 수 없는 소스 # 요소에 속성 값 할당 HTML 삽입 미리보기할 수 없는 소스 노드 속성 및 메서드 # 노드 내 텍스트에 접근 - 텍스트 가져오기 : 노드명.textContent - 텍스트 입력 : 노드명.textCon..

[JavaScript] HTML 렌더링과 JavaScript 실행 [내부링크]

HTML 렌더링 순서 1. 서버에서 HTML 문서를 받아옴 2. HTML 문서를 파싱하여 DOM 트리를 생성함 3. CSS 파일을 로드/파싱하여 CSSOM 트리를 생성함 4. DOM 트리와 CSSOM 트리를 결합하여 렌더트리를 생성함 5. 렌더트리를 기반으로 레이아웃을 계산하고, 실제로 화면에 표시될 요소를 결정함 6. 브라우저에서 화면에 표시함 JavaScript 실행 순서 1. HTML 파싱 중 태그를 만나면, 해당 스크립트를 다운로드함 2. 스크립트를 파싱하여 실행 가능한 코드를 생성함 - 이때, 오류가 있으면 실행되지 않음 3. 생성된 코드를 실행함 4. 다음 태그를 만날 때까지 파싱과 실행을 반복함 # 유의사항 - 스크립트 코드가 HTML 파싱 과정에서 실행되는 순서에 따라 예기치 못한 결과가 ..

[JavaScript] 이벤트 [내부링크]

이벤트 등록 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 마우스 이벤트 # click - HTML 요소를 마우스로 눌렀을 때 # dblclick - HTML 요소를 마우스로 두 번 눌렀을 때 # mousedown - 요소 위에서 마우스 버튼을 누르는 동안 # mousemove - 요소 위에서 마우스 포인터를 움직일 때 # mouseover - 마우스 포인터가 요소 위로 옮겨질 때 # mouseout - 마우스 포인터가 요소를 벗어날 때 # mouseup - 누르고 있던 마우스 버튼에서 손을 뗄 때 키보드 이벤트 # keypress - 키를 눌렀을 때 # keydown - 키를 누르는 동안 # keyup - 키에서 손을 뗄 때 폼 이벤트 # blur - 폼 요소에서 포커스..

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 9일차~종료 (04/30~05/02) [내부링크]

수강 신청 기간 설정 1. 예비 수강 신청 기간 2. 수강 신청 기간 3. 수강 신청 기간 종료 수강 신청 기간이 되면, 예비 수강 신청 목록을 확인함 → 정원 >= 신청인원인 강의는 예비 수강 신청 내역이 수강 신청 내역으로 자동으로 넘어감 → 정원 < 신청인원인 강의는 신청 인원이 0으로 초기화되며, 학생이 직접 신청하도록 함 예비 수강 신청 내역이 있는 강의들은 본 수강 신청이 용이하도록 수강 신청 탭에 들어가면 가장 먼저 출력되도록 함 메인 페이지 교직원으로 접속 시, 현재 처리되지 않은 휴학 신청 내역이 있다면 메인 페이지에서 확인 가능하도록 함 (영상에는 수정 전이지만, 현재는 종 아이콘을 노란색으로 표시해서 눈에 더 잘 띄도록 함) 공지사항/학사일정 페이지와 연결함 페이징 처리 각자의 기능에..

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 7~8일차 (04/27~4/28) [내부링크]

# 예비 수강 신청 (수강 장바구니) - 현재 학기에 재학 상태가 되는 학생인지 확인 - 신청/취소할 때마다 강의의 현재 인원 변경 - 신청 강의의 정원 초과 가능 - 최대 수강 가능 학점을 넘지 않는지 확인 (18학점) - 자신의 시간표와 겹치지 않는지 확인 - 예비 수강 신청에서는 신청 시 confirm 메시지를 띄움 (선착순이 아니므로) # 수강 신청 - 현재 학기에 재학 상태가 되는 학생인지 확인 - 신청/취소할 때마다 강의의 현재 인원 변경 - 최대 수강 가능 학점을 넘지 않는지 확인 - 자신의 시간표와 겹치지 않는지 확인 - 신청 강의의 정원 초과 불가능 - 수강 신청에서는 신청 시 confirm 메시지를 띄우지 않음 # todo 예비 수강 신청 기간에서 수강 신청 기간이 되면, 예비 수강 신..

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 5~6일차 (04/25~4/26) [내부링크]

등록금 관련 # 등록금 고지서 일괄 생성 - 등록금 납부 대상인지 확인 · 졸업/자퇴 상태면 X · 휴학 신청 테이블을 확인해서, 현재 연도-학기까지의 휴학을 승인받았다면 X - 이미 생성되어 있다면 X - 장학금 유형 결정 1) 1학년 2학기 이상이라면 - 직전 학기 성적 평균에 따라 1유형/2유형/해당없음으로 나뉨 2) 1학년 1학기라면 - 성적 데이터가 없기 때문에, 모두 2유형으로 할당함 # 등록금 고지서 페이지 진입 시 - 등록금 납부 대상이 아니라면 고지서 페이지로 진입 불가 # 하드코딩 수정 - 학생 정보 부분을 동적으로 바꿈 학적 상태 - 학생 생성 시 학적 상태 테이블에도 자동으로 '재학' 상태 추가 - 등록금 납부 성공 시, 휴학 상태인 학생이라면 재학 상태로 변경 (데이터 추가) - ..

[Spring Boot] MyBatis xml 파일에서 WHERE ... LIKE 문 사용하기 [내부링크]

에러 코드 org.mybatis.spring.MyBatisSystemExceptionnested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: 해결 # MySQL WHERE 컬럼명 LIKE CONCAT('%', #{name}, '%') 위와 같이 사용해야 정상적으로 작동한다.

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 4일차 (04/24) [내부링크]

# 휴학 신청 및 조회 (학생) - 교직원이 신청에 대해 처리하면 상태가 변함 - 아직 처리가 완료되지 않은 휴학 신청은 취소할 수 있음 (delete) # 휴학 신청 처리 (교직원) - 아직 처리가 완료되지 않은 휴학 신청만 리스트에 출력되도록 함 - 해당 신청서 상세 페이지로 들어가서 승인 또는 반려로 처리할 수 있음 # 경로를 지정해서 보낼 수 있는 예외 클래스 생성 - location.href의 값을 매개변수로 받음

[Spring Boot] 리소스 처리 : HOST 컴퓨터의 리소스 활용하기 [내부링크]

# 관련 포스팅 - 프로젝트 외부 HOST 컴퓨터에 파일 업로드하기 : https://young0105.tistory.com/242 # 리소스 경로 가칭 설정하기 HTML 삽입 미리보기할 수 없는 소스 # DB 데이터를 받을 Model 클래스 HTML 삽입 미리보기할 수 없는 소스 # jsp 파일 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 프로젝트 외부 HOST 컴퓨터에 파일 업로드하기 [내부링크]

# 관련 포스팅 - 업로드된 파일을 JSP에 가져오기 : https://young0105.tistory.com/243 # form - input 태그 HTML 삽입 미리보기할 수 없는 소스 # 상수 선언 1) 업로드 파일의 최대 크기 2) 업로드한 파일을 저장할 경로 HTML 삽입 미리보기할 수 없는 소스 # file을 받을 DTO HTML 삽입 미리보기할 수 없는 소스 # form 태그를 처리하는 Controller HTML 삽입 미리보기할 수 없는 소스

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 1~3일차 (04/21~04/23) [내부링크]

# 레이아웃 1일차에는 레이아웃 만들려다가 시간을 너무 많이 버려서 진행된 게 거의 없었다. 틀만 만들어 두고 나중에 꾸며야지 했는데.. 신경 쓰여서 그냥 토요일 새벽에 완성했다. 학사 관리 시스템 홈페이지 느낌보다는 대학교 공식 홈페이지 느낌으로 만들어지긴 했는데 깔끔해서 마음에 든다. # 등록금 내역 조회 페이지 테이블도 예쁘게 꾸미고 싶은데 어떻게 할지 모르겠다. # 등록금 납부 고지서 생성 기능 이 기능은 나중에 교직원 쪽으로 넘길 예정이다. 장학금 유형에 따라 최대 장학금액이 정해지고, 학과-단과대에 따라 등록금이 정해지기 때문에 장학금 유형만 미리 정해두면 나머지 값들은 DB에서 알아서 가져와지게 구현해두었다. 장학금 유형은 1학년 2학기부터는 성적을 기준으로 정하면 되겠는데 1학년 1학기는 ..

[개발 일지] 학사 관리 시스템 Web 개발 프로젝트 0일차 (기획 단계) [내부링크]

팀 프로젝트 주제 대학교 학사 관리 시스템 구현하기 프로젝트 기간 2023/04/21 ~ 2023/05/01 깃허브 주소 https://github.com/seoyounglee0105/university_management_project 초기 구상 기능 - User를 학생/교수/교직원으로 나눔 User ① 학생 1) MY - 내 정보 조회 (개인 정보, 학적 변동 등) - 내 정보 변경 - 비밀번호 변경 - 등록금 내역 조회 - 장학금 내역 조회 - 등록금 납부 고지서 (문서, 입금 계좌 번호 정도?) - 휴학 신청 (신청 → 교직원이 확인해서 승인 → 학적 변동) 2) 수업 - 교과목 조회 (전체 연도/학기의) 3) 수강 - 수강 안내 - 수강 시간표 조회 (해당 학기의) - 수강 신청 - 수강 신청 ..

[Spring Code] 암호화 처리를 이용한 회원가입과 로그인 [내부링크]

# 관련 포스팅 - 암호화 처리 : https://young0105.tistory.com/238 # WebMvcConfigurer 구현 클래스에 암호화 처리 인코더 선언 HTML 삽입 미리보기할 수 없는 소스 - 암호화 처리는 Service 레이어에서 수행 # UserService HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 암호화 처리 [내부링크]

암호화 처리 - 단방향 암호화 : 암호화되고 나면 복호화할 수 없음 → 정보 통신법에서는 단방향 암호화를 지향함 - 양방향 암호화 - 해싱 처리 · 값을 특수한 문자열로 암호화 · 같은 값을 입력하면 동일하게 암호화된 값이 반환됨 · 다른 값을 입력하면 특수한 문자열이 변경됨 → 값이 변경되었음을 빠르게 인식할 수 있게 됨 - 예시 코드 : https://young0105.tistory.com/239 # build.gradle에 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 # 기본 사용 방법 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 마이그레이션 : H2 DB에서 MySQL DB로 변경하기 [내부링크]

마이그레이션 (Migration) - DB 스키마의 변경 내역을 버전 관리하여 이력을 남기고, DB를 이전 버전에서 최선 버전으로 옮기는 일련의 과정 - 스키마를 변경하거나 새로운 테이블/컬럼을 추가하는 등의 작업을 포함함 개발용 H2 DB에서 MySQL DB로 변경하기 # build.gradle에 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 # application.yml 설정 HTML 삽입 미리보기할 수 없는 소스 # DataSource - DB에 접근하기 위한 Connection을 생성/관리 → 해당 Connection 객체를 통해 SQL문을 실행하고 DB에 접근함 → 즉, DataSource는 데이터베이스와 연결하기 위한 인터페이스 - DB 연결/종료 부분을 개발자가 직접 처리하지 않아도 ..

[Spring Boot] 파비콘 설정 방법 [내부링크]

# 파비콘 (favicon) - 웹 브라우저의 주소 창에 표시되는, 웹사이트를 대표하는 아이콘 - favorites + icon 스프링 부트로 실행한 웹 페이지의 파비콘 설정하기 1. 원하는 이미지를 .ico 파일로 변환하고, favicon.ico라는 이름으로 저장 - http://icoconvert.com/ 2. favicon.ico를 src/main/resources/static 폴더에 넣기 3. 파비콘이 바로 적용되지 않는다면, [F12 개발자 도구] → [강력 새로고침]

[SQL] COMMENT [내부링크]

컬럼에 코멘트 부여 # 테이블 생성 시점에 부여 HTML 삽입 미리보기할 수 없는 소스 # 테이블 생성 이후 부여 (수정도 가능함) HTML 삽입 미리보기할 수 없는 소스 테이블에 코멘트 부여 # 테이블 생성 시점에 부여 HTML 삽입 미리보기할 수 없는 소스 # 테이블 생성 이후 부여 (수정도 가능) HTML 삽입 미리보기할 수 없는 소스 코멘트 삭제 HTML 삽입 미리보기할 수 없는 소스 코멘트 조회 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] Controller에서 jsp 파일로 데이터 전달 [내부링크]

jsp 파일로 데이터를 전달하는 방법 - Model 또는 ModelAndView를 매개변수로 활용 → ModelAndView는 동적으로 페이지를 반환할 경우 사용함 → 일반적으로는 Model이 더 많이 사용됨 # Model HTML 삽입 미리보기할 수 없는 소스 # ModelAndView HTML 삽입 미리보기할 수 없는 소스 # 예시 코드 더보기 HTML 삽입 미리보기할 수 없는 소스

[SQL] 쿼리 조건문 (ifnull, nullif, CASE) [내부링크]

- 쿼리 조건문을 사용하면 동적 쿼리를 생성할 수 있음 # ifnull(컬럼명a, b) - 컬럼명 a가 null이면 b를 반환하고, 컬럼명 a가 null이 아니라면 a를 반환함 # nullif(컬럼명a, 컬럼명b) - 컬럼명 a의 값과 컬럼명 b의 값이 동일하면 null을 리턴함 - 컬럼명 a의 값과 컬럼명 b의 값이 다르면 컬럼명 a의 값을 리턴함 # CASE WHEN THEN ENDHTML 삽입미리보기할 수 없는 소스 예시더보기HTML 삽입미리보기할 수 없는 소스

[Spring Code] DAO - Service - Controller 구조 예시 [내부링크]

# DAO interface 더보기 HTML 삽입 미리보기할 수 없는 소스 # DAO 쿼리문 xml 더보기 HTML 삽입 미리보기할 수 없는 소스 # Service 더보기 HTML 삽입 미리보기할 수 없는 소스 # Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 - 인증 검사는 반복되므로 인터셉터로 하기

[Java] 데이터 형식 지정 [내부링크]

날짜 형식 지정 # 재사용 가능한 클래스 생성 - 위치 : 메인패키지.utils 아래 HTML 삽입 미리보기할 수 없는 소스 # 활용 - Timestamp 형식의 멤버 변수를 'yyyy-mm-dd HH:mm:ss' 형태로 변환해서 반환하는 메서드 HTML 삽입 미리보기할 수 없는 소스 숫자 형식 지정 # 재사용 가능한 클래스 생성 HTML 삽입 미리보기할 수 없는 소스 # 활용 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 트랜잭션 어노테이션 [내부링크]

# 관련 포스팅 - 트랜잭션 개념 : https://young0105.tistory.com/229 @Transactional 어노테이션 - 주로 Service Layer에서 insert, update, delete, 복잡한 select를 포함하는 메서드 위에 지정함 · 메서드 호출 시 트랜잭션의 시작 · 메서드 종료 시 트랜잭션의 종료 (정상 종료 → commit) - 트랜잭션 범위 내에서 실행되는 모든 작업이 원자성을 갖도록 보장함 - 트랜잭션의 ACID 성질을 보장하기 위해 다양한 설정 옵션을 제공함 HTML 삽입 미리보기할 수 없는 소스

[SQL] 트랜잭션 (Transaction) [내부링크]

트랜잭션 (Transaction) - 하나의 작업을 수행하는 데 필요한 데이터베이스 연산을 모아놓은 것 - DB에서 수행되는 작업의 단위 - 분리될 수 있는 하나 이상의 데이터베이스 조작 # 기본 형태 HTML 삽입 미리보기할 수 없는 소스 트랜잭션 제어어 (TCL) 1) COMMIT - 트랜잭션 수행이 성공적으로 완료됨을 선언하는 연산 - 트랜잭션의 수행 결과가 DB에 반영되고, 일관된 상태를 지속적으로 유지함 : 실제 물리적 저장장치에 저장됨 2) ROLLBACK - 트랜잭션 수행이 실패함을 선언하는 연산 - DB가 트랜잭션 수행 전의 일관된 상태로 되돌아감 - COMMIT 연산 이전에만 사용 가능 트랜잭션의 특성 (ACID) 1) 원자성 (Atomicity) - 트랜잭션 내의 연산들이 모두 정상적으..

[Spring Boot] Model 클래스 (Entity)와 DTO 클래스 [내부링크]

Model 클래스 (Entity) - DB에서 받아온 데이터를 담는 클래스 - 값을 담아둘 수 있고, 필요하다면 기능(메서드)를 추가해둘 수 있음 - 코딩 컨벤션 : SELECT 문을 통해 받아온 Model 객체의 변수명을 'Model명 + Entity'로 짓기 DTO - 데이터 전송 객체 - Form 태그에서 보내야 하는 정보들만 멤버 변수로 갖는 DTO를 각각 선언함 ex) SignInFormDto의 멤버 변수 : id, password ex) SignUpFormDto의 멤버 변수 : id, password, name, age - DTO 간에 멤버 변수가 겹치는 경우 · 상속은 권장하지 않음 (코드 변경이 이뤄지면서 꼬일 수 있음) · 포함 관계로 사용하는 경우는 많음 (초보 단계에서는 우선 사용하지..

[Spring Code] 사용자 정의 예외 클래스와 에러 페이지 [내부링크]

# 관련 포스팅 - 예외 처리 : https://young0105.tistory.com/196 # 사용자 정의 예외 클래스 - src/main/java/메인패키지.handler.exception 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 유형 1) 예외 발생 시, 에러 페이지를 반환하기 # @ControllerAdvice - src/main/java/메인패키지.handler 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 # 에러 페이지 - src/main/webapp/WEB-INF/view 아래에 생성 HTML 삽입 미리보기할 수 없는 소스 # 사용하기 - if 문에서 특정 조건에 해당하면 에러 페이지를 반환하는 방식으로 활용할 수 있음 HTML 삽입 미리보기할 수 없는 소스 유형 2) 예..

[Spring Boot] MyBatis 설정 및 DAO 구현 [내부링크]

MyBatis - Java 객체와 SQL문 사이의 자동 매핑을 지원하는 매퍼 프레임워크 - SQL 쿼리를 작성할 때 xml 또는 어노테이션 이용 가능 → 쿼리 구문을 작성해서 데이터베이스와 통신 수행 - 매우 유연한 구조 · SQL 쿼리와 Java 객체의 매핑 규칙을 세부적으로 지정할 수 있음 · 동적 SQL 쿼리 구문을 작성할 수 있음 MyBatis 설정 1) 의존성 추가 (build.gradle) HTML 삽입 미리보기할 수 없는 소스 2) 설정 (application.yml) HTML 삽입 미리보기할 수 없는 소스 DAO 구현 1. 표준을 위한 인터페이스 정의 - src/main/java/com.example.demo.repository.interfaces. ~ 예시 더보기 HTML 삽입 미리보..

[jQuery] 개요 [내부링크]

jQuery - JavaScript를 이용하여 만든 라이브러리 언어 - 더 적게 작성하고, 더 많이 수행하는 경량 JavaScript 라이브러리 - 쉽고 편리한 애니메이션 효과 기능 구현 - 웹 사이트에서 js를 훨씬 더 쉽게 사용할 수 있도록 하는 것 - HTML/DOM 처리 - css 핸들링 가능 - 이벤트 등록 및 삭제 핸들링 가능 - 애니메이션 처리를 쉽게 사용 - AJAX (비동기 통신 처리) 가능 jQuery 사용하기 방법 ① - https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.js - [Ctrl] + [S]로 jquery.js 파일을 js 폴더에 저장 - 부분에 아래 코드 입력 방법 ② - 부분에 아래 코드 입력 jQuery 기본 형식

[JavaScript] 내장 함수 [내부링크]

# 데이터 타입을 확인하는 연산자 - typeof 변수 # 데이터 타입 변환 - Number(변수) : 숫자형 타입으로 변환 - parseInt(변수) : 정수형 타입으로 변환 - parseFloat(변수) : 실수형 타입으로 변환 - String(변수) : 문자형 타입으로 변환 - Boolean(변수) : 논리형 타입으로 변환 · 입력된 값 : true · null : false # true/false 판별 - isNaN("문자열") : 숫자가 아닌 문자가 포함되어 있으면 true · isNaN : is Not a Number ex) isNaN("5-3") : true # 문자형 데이터를 코드 형식으로 인식하도록 변환 - eval("문자열")

[JavaScript] 객체 생성자 함수 (사용자 정의 객체) [내부링크]

객체 생성자 함수 - 객체를 생성할 때 사용하는 함수 - 함수 내에 this 키워드가 사용되면 객체 생성자 함수로 취급됨 - Java에는 없는 개념 (클래스와 유사) - 네이밍 컨벤션 : 객체 생성자 함수의 앞글자를 대문자로 표기함 # 함수 정의 HTML 삽입 미리보기할 수 없는 소스 # 객체 생성 HTML 삽입 미리보기할 수 없는 소스 # 모던 자바스크립트 객체 프로토타입 HTML 삽입 미리보기할 수 없는 소스

[JavaScript] 함수 [내부링크]

함수 - 자바스크립트에서는 함수 자체가 표현식임 → 함수를 변수에 할당하거나, 함수의 매개변수로 사용할 수 있음 함수 정의 # 일반 함수 - 호이스팅 (Hoisting, 갈고리) 기술 지원 : 호출문이 함수 정의문보다 먼저 나와도 호출문이 정상 작동함 - 매개변수가 있는 함수를 매개변수 없이 호출한 경우 : 매개변수가 포함된 코드에는 Undefined 출력 - 매개변수를 배열로 받으면 많은 양을 간단하게 처리 가능 HTML 삽입 미리보기할 수 없는 소스 # 익명 함수 - 이름이 없는 함수 - 호이스팅 기술 미지원 → 호출문이 함수 정의문보다 먼저 나오면 오류가 발생함 - 앞 호출문에 오류가 발생하면, 정상 위치의 호출문도 오류가 발생함 HTML 삽입 미리보기할 수 없는 소스 # 즉시 실행 함수 - 익명 ..

[JavaScript] BOM : history 객체 [내부링크]

history 객체 - 현재 창에서 사용자의 방문 기록을 저장하고 있는 객체 - 사용자가 'GET' 방식으로 방문한 사이트의 기록을 남김 # 이전 방문 사이트로 이동 history.back(); # n단계 이전 방문 사이트로 이동 history.go(-n); # 다음 방문 사이트로 이동 history.forward(); # n단계 다음 방문 사이트로 이동 history.go(n); # 방문 기록에 저장된 사이트의 개수 반환 history.length

[JavaScript] BOM : location 객체 [내부링크]

location 객체 - 현재 페이지에 대한 URL 정보를 가지고 있는 객체 - 해당 정보를 편집하면 현재 브라우저 창에 열릴 사이트/문서를 지정할 수 있음 # 브라우저 새로고침 location.reload(); # 현재 페이지의 URL 정보 반환 location.href # 페이지 이동 location.href = "URL주소"; # URL의 호스트 이름 정보 반환 location.hostname # URL의 호스트 이름 설정 location.hostname = "호스트이름"; # URL의 호스트 이름과 포트번호 반환 location.host # URL의 프로토콜 반환 location.protocol # URL의 쿼리(요청 값) 반환 (?로 시작하는 검색 내용 부분) location.search # U..

[JavaScript] BOM : screen 객체 [내부링크]

screen 객체 - 현재 사용 중인 화면 정보를 다루는 객체 # 화면 너비 screen.width # 화면 높이 screen.height # 작업 표시줄을 제외한 화면 너비 screen.availWidth # 작업 표시줄을 제외한 화면 높이 screen.availHeight # 사용자 모니터가 표현 가능한 컬러 bit screen.colorDepth

[JavaScript] BOM : window 객체 [내부링크]

window 객체 - 브라우저 창이 열릴 때마다 하나씩 만들어지는 객체 - 브라우저 창 안에 존재하는 모든 요소의 최상위 객체 # 새 창 열기 window.open("URL", "새창이름", "옵션1, 옵션2, ..."); - "새 창 이름"이 동일하면 하나만 표시됨 → 여러 팝업을 띄우러면 팝업명을 서로 다르게 설정해야 함 [옵션] 1) 크기 - width : 너비 - height : 높이 2) 위치 - left : 수평 위치 - top : 수직 위치 3) scrollbars : 스크롤바 숨김(no) or 노출(yes) 설정 4) location : URL 주소 입력 영역의 숨김(no) or 노출(yes) 설정 5) status : 상태 표시줄 영역의 숨김(no) or 노출(yes) 설정 6) tool..

[JavaScript] 날짜 객체 (Date) [내부링크]

객체 생성 HTML 삽입 미리보기할 수 없는 소스 - 월이 0~11로 표기됨 → (원하는 월 - 1)로 표기해서 생성함 # 연도 반환 - 날짜변수.getFullYear() # 월 반환 - 날짜변수.getMonth() - 기준 : 0 (1월) ~ 11 (12월) → 표시할 때는 날짜변수.getMonth() + 1로 사용하기 # 일 반환 - 날짜변수.getDate() # 요일 반환 - 날짜변수.getDay() - 기준 : 0 (일요일) ~ 6 (토요일) 요일을 문자로 나타내기 HTML 삽입 미리보기할 수 없는 소스 # 시간 반환 - 날짜변수.getTime() : 1970/01/01 00:00부터 지나온 시간을 밀리세컨드(ms)로 계산함 날짜 간 차이 구하기 HTML 삽입 미리보기할 수 없는 소스

[JavaScript] 문자열 객체 (String) [내부링크]

객체 생성 HTML 삽입 미리보기할 수 없는 소스 # 해당 인덱스에 해당하는 값 반환 - 문자열변수.charAt(인덱스) # 앞에서부터 해당 값을 찾아 인덱스 반환 ① 문자열변수.indexOf("문자열a", [n]) 1) 숫자 n을 입력하지 않은 경우 : 가장 먼저 나오는 "문자열a"의 인덱스를 반환함 2) 숫자 n을 입력한 경우 : 인덱스 n번 이후로 가장 처음 나오는 "문자열a"의 인덱스를 반환함 - 존재하지 않는 경우 -1 반환 ② 문자열변수.search("문자열a") : 가장 먼저 나오는 "문자열a"의 인덱스가 출력됨 - 존재하지 않는 경우 -1 반환 # 뒤에서부터 해당 값을 찾아 인덱스 반환 - 문자열변수.lastIndexOf("문자열a", [n]) 1) 숫자 n을 입력하지 않은 경우 : 가장 ..

[JavaScript] 배열 객체 (Array) [내부링크]

객체 생성 - 배열 요소로 다양한 유형의 데이터를 가질 수 있음 HTML 삽입 미리보기할 수 없는 소스 배열 값 가져오기 HTML 삽입 미리보기할 수 없는 소스 - 존재하지 않는 인덱스 값을 가져오려고 하면 undefined 반환 # 배열을 하나의 문자열로 연결 - 배열명.join(연결문자) : '연결문자'로 배열 요소들을 연결하여 나타냄 # 배열1에 배열2를 연결 - 배열명1.concat(배열명2) # 오름차순 정렬 - 배열명.sort(); · 새로운 배열 생성 X : 기존 배열변수가 정렬됨 # 기존 순서의 역순으로 정렬 - 배열명.reverse(); · 새로운 배열 생성 X : 기존 배열변수가 정렬됨 # 배열의 마지막 요소를 삭제하면서, 그 요소를 반환 - 배열명.pop(); · 새로운 배열 생성 X..

[Spring Code] 기획서에 맞춰 UI 구성 + 간단한 알고리즘 설계 [내부링크]

주어진 과제는 위 기획서에 맞춰 레이아웃만 구성해보는 것이었는데, 시간이 조금 남아서 게시글 개수에 따라 출력되는 수, 페이지 수가 다르게 나타나도록 만들어 보았다. # Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 # jsp 더보기 HTML 삽입 미리보기할 수 없는 소스 # css 더보기 HTML 삽입 미리보기할 수 없는 소스 실행

[JSP] JSTL 태그 안에 HTML 주석 작성 시 오류 [내부링크]

# 관련 포스팅 - JSP 스크립트 : https://young0105.tistory.com/158 - JSTL : https://young0105.tistory.com/167 제목 ${j * 4 + i} 2023.04.12. ... 위와 같은 코드처럼 JSTL 태그 안에 HTML 주석을 작성하면 org.apache.jasper.JasperException 라는 오류가 발생할 때가 있다. (매번 오류가 발생하는 것은 아니고 정상 실행될 때도 있다.) JSTL 태그 안에는 JSP 스크립트 주석을 사용하도록 하자. 제목 ${j * 4 + i} 2023.04.12. ...

[Spring Boot] TRM (Table Relational Mapping) 기반 모델링 [내부링크]

TRM (Table Relational Mapping) - DB의 테이블과 애플리케이션의 객체 간의 매핑 - MyBatis에서는 DB 쿼리를 xml 파일로 작성하고, Java 코드에서 이를 호출하는 방식으로 DB와 상호작용 # 모델 클래스 - DB에서 받아온 데이터를 담는 클래스 (DTO와 구분하기!) - 값을 담아둘 수 있고, 필요하다면 기능(메서드)를 추가해둘 수 있음 # DTO (모델 클래스와 비교) - 데이터 전송 객체 - Form 태그에서 보내야 하는 정보들만 멤버 변수로 갖는 DTO를 각각 선언함 ex) SignInFormDto의 멤버 변수 : id, password ex) SignUpFormDto의 멤버 변수 : id, password, name, age - DTO 간에 멤버 변수가 겹치는 ..

[Spring Boot] 프로젝트 초기 절차 정리 [내부링크]

1. 워크 스페이스 생성 + 깃 허브 등록 [이클립스 환경 설정] - UTF-8 설정 - 다크 모드 - 폰트 (D2 Coding) - File Associations에 *.css, *.js, *.jsp 있는지 확인하고 없으면 add → Text Editor를 Default로 (*.css는 css Editor를 Default로) [플러그인] (설치하지 않은 경우에만) - [Help] - [Eclipse Marketplace] 1) jsp 검색 → [Eclipse Enterprise Java and Web Developer Tools] 설치 2) sql 검색 → [SQL Editor] 설치 2. Spring Starter Project 생성 [프로젝트 설정] - 프로젝트 이름 설정 - 패키지 이름 설정 - ..

[Spring Boot] yml 파일 [내부링크]

# yml 파일의 특징 - 엄격한 문법 규칙 · 하위 요소를 입력할 때에는 스페이스 2번 (TAP 키 == 스페이스 2번) · 콜론(:) 이전에는 스페이스 X · 콜론(:) 다음에는 스페이스 1번 · 단, 경로 지정 시의 :는 스페이스 X - 하이픈(-)을 통해 Array임을 나타냄 - properties 파일보다 반복적인 부분이 적음 - 주석 : # HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] Gradle 빌드 라이브러리 의존성 추가 [내부링크]

# AOP 라이브러리 - https://young0105.tistory.com/192 HTML 삽입 미리보기할 수 없는 소스 # Validation 라이브러리 - https://young0105.tistory.com/194 HTML 삽입 미리보기할 수 없는 소스 # JSP 템플릿 엔진 라이브러리 + JSTL 라이브러리 - https://young0105.tistory.com/197 HTML 삽입 미리보기할 수 없는 소스 # MyBatis 라이브러리 - SQL mapper 프레임워크 - 객체와 SQL 쿼리를 매핑하여, 개발자가 SQL 쿼리를 직접 작성하지 않아도 DB에 접근할 수 있게 지원 - MyBatis와 MyBatis-Spring 연동을 자동으로 설정해줌 HTML 삽입 미리보기할 수 없는 소스 # H..

[JavaScript] 수학 객체 (Math) [내부링크]

# 소수점 처리 - 올림 : Math.ceil(변수) - 반올림 : Math.round(변수) - 내림 : Math.floor(변수) → a를 b로 나눈 몫 구하기 : Math.floor(a/b) # 제곱근 - Math.sqrt(변수) # 절댓값 - Math.abs(변수) # 최댓값과 최솟값 - 최댓값 : Math.max(변수1, 변수2, ...) - 최솟값 : Math.min(변수1, 변수2, ...) # 거듭제곱값 - Math.pow(변수, 제곱승) # 원주율 상수 (3.14...) - Math.PI # 난수 생성 - Math.random() : 0 ~ 0.9999... 사이의 소수 난수 생성 - Math.random() * n : 0 ~ (n - 1.9999...) 사이의 소수 난수 생성 - Mat..

[JavaScript] 입력과 출력 [내부링크]

화면에 데이터 출력 document.write(값) ; // 줄바꿈 document.write(" ") ; 브라우저의 콘솔에 데이터 출력 console.log(값); 입력형 질문 - 입력된 값은 String 타입 → 숫자를 사용하려면 parseInt 함수로 타입 변환하기 let 변수명 = prompt("질문내용", ["초깃값"]) ; 확인/취소 질문 - 확인 : true / 취소 : false let 변수명 = confirm("질문내용"); 경고창 출력 alert("경고내용");

[JavaScript] 객체 (Object) [내부링크]

객체 (Object) - 기능(Method)과 속성(Property)을 가지는 것 - 자바스크립트의 객체는 '일급 객체'라고 부름 : 다른 객체들에 일반적으로 적용 가능한 연산을 모두 지원하는 객체 - 프로토타입 : 객체의 속성과 메서드를 모아 놓은 틀 (Java의 클래스와 유사) - 인스턴스 : 프로토타입으로 찍어낸 객체 → 프로토타입의 속성과 함수를 동일하게 사용함 ① 내장 객체 (Built-in Object) - 미리 정의되어 있는 객체 ex) String, Date, Array, Math, ... ② 브라우저 객체 모델 (BOM) - 웹 브라우저의 요소(창, 화면, URL 등)를 객체로 관리함 ex) window. screen, location, history, navigator, ... ③ 문서..

[JavaScript] 제어문 : 조건문과 반복문 (if, switch, for, while) [내부링크]

조건문 if - 조건에 두 개 이상의 비교 연산자가 연달아 사용되면 작동하지 않음 → 논리 연산자로 연결해야 함 if (조건식) { 수행문; ... } else if (조건식) { 수행문; ... } else { 수행문; ... } 선택문 switch - 일치하는 경우의 값이 있을 때만 특정 코드를 실행함 switch (변수) { case 값1 : // 콜론이어야 함에 유의 코드1; // 변수가 해당 값과 일치하면 코드 실행 break; // break를 작성하지 않으면 계속 다음 case로 넘어가게 됨 case 값2 : 코드2; break; case 값3 : 코드3; break; ... // 변수가 모든 case 값과 불일치하거나, 입력되지 않은 경우 [default : 코드n;] } 반복문 for f..

[JavaScript] 연산자 [내부링크]

산술 연산자 A + B A와 B를 더하기 A - B A에서 B를 빼기 A * B A와 B를 곱하기 A / B A에서 B를 나누기 A % B A에서 B를 나눈 나머지 A ** B A의 B승 형 변환 - 문자형 데이터 + 문자형 데이터 → 문자형 데이터 - 문자형 데이터 + 숫자형 데이터 → 문자형 데이터 - 산술 연산에서는 문자형 자료를 모두 숫자로 자동 인식함 대입 연산자 (할당 연산자) L value += R value; (왼쪽 항 + 오른쪽 항)을 왼쪽 항에 대입 L value -= R value; (왼쪽 항 - 오른쪽 항)을 왼쪽 항에 대입 L value *= R value; (왼쪽 항 * 오른쪽 항)을 왼쪽 항에 대입 L value /= R value; (왼쪽 항 / 오른쪽 항)의 몫을 왼쪽 항에..

[JavaScript] 변수와 자료형 [내부링크]

변수 선언 - 느슨한 자료형 체크 - 변수 선언 시, 변수에 할당되는 자료형을 명시하지 않아도 됨 - 변수를 지정하고 원하는 값을 할당만 하면 됨 1) var : 같은 이름으로 변수를 재선언할 수 있음 → 잘 사용하지 않음 2) let : 재선언할 수 없으며, 값 변경이 가능한 변수 → 가장 자주 사용됨 3) const : 재선언할 수 없으며, 값 변경이 불가능한 변수 (Java의 상수와 유사) → 처음 선언할 때 값을 초기화해줘야 함 HTML 삽입 미리보기할 수 없는 소스 자료형 1) 문자형 데이터 (string) - 홑따옴표 또는 쌍따옴표로 표기 2) 숫자형 데이터 (number) 3) 논리형 데이터 (boolean) 4) 객체 (object) : 중괄호({})로 묶인 key-value 쌍들의 집합 ..

[JavaScript] 개요 [내부링크]

자바스크립트 (JavaScript) - 사용자의 상호작용에 따라 웹 페이지를 동적으로 제어하기 위한 프로그래밍 언어 - 웹 브라우저에서 동작함 - 클라이언트 측에서 실행됨 - 웹 페이지를 동적으로 만들고, 사용자와 상호작용하는 기능을 구현함 · HTML 요소의 속성 값 변경 · 이벤트 핸들러 등록 → 사용자의 동작에 따라 새로운 기능을 수행하도록 함 · AJAX를 이용하여 서버와 비동기적으로 데이터를 주고받을 수 있음 - 브라우저를 제어하는 데 주로 사용됨 ·서버 측 프레임워크(Node.js 등)를 이용하여 서버 측에서도 사용될 수 있음 # 컴파일러 언어 vs 인터프리터 언어 - 자바스크립트는 기본적으로 인터프리터 언어로 분류됨 · 실행 시간에 소스 코드를 해석하여 실행하는 언어 · 코드를 컴파일하지 않..

[Spring Code] 인터셉터 구현 예시 [내부링크]

# 관련 포스팅 - 인터셉터 개념 : https://young0105.tistory.com/199 DTO 더보기 HTML 삽입 미리보기할 수 없는 소스 jsp form 태그 더보기 HTML 삽입 미리보기할 수 없는 소스 Controller 더보기 HTML 삽입 미리보기할 수 없는 소스 HandlerInterceptor 인터페이스의 구현 클래스 더보기 HTML 삽입 미리보기할 수 없는 소스 WebMvcConfigurer 인터페이스의 구현 클래스 더보기 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 세션 (Session) [내부링크]

# 관련 포스팅 - 세션 개념 : https://young0105.tistory.com/160 - JSP 세션 사용법 : https://young0105.tistory.com/163 세션 (Session) - 내장형 서버의 메모리 기반 세션을 사용함 → 세션 데이터가 서버의 메모리에 저장됨 → 서버를 재시작하면 세션 데이터가 모두 삭제됨 → 방안 : 세션 클러스터링, 분산 캐시 (세션 데이터를 외부 저장소에 저장함) # Controller에서 session 객체 가져오기 HTML 삽입 미리보기할 수 없는 소스 세션 관련 설정 - application.properties 또는 application.yml 파일에서 설정 # 세션 타임아웃 설정 (기본값 : 30분) - 세션 유효시간 - 페이지를 이동할 때마다..

[Spring Boot] 인터셉터 (Interceptor) [내부링크]

인터셉터 (Interceptor) - 요청을 처리하기 전과 후에 실행되는 코드 - 컨트롤러에 도달하기 전과 후에 사용자 지정 작업을 수행할 수 있음 - Filter와 매우 유사한 형태 → 차이점 : Spring Context에 등록되고, Spring Container에서 동작함 (Filter는 WAS에서 동작) · 필터는 인증 과정에서 로깅 정도로만 사용함 (어떤 데이터가 들어 있는지 등) - AOP와 유사한 기능 제공 : 선/후 처리함으로써, 비즈니스 로직과 분리시킴 - 용도 · 인증 단계 처리 · 로깅, 인가, 데이터 변환 등의 공통 작업 수행 - 필요에 따라 인터셉터를 여러 개 등록하거나, 특정 경로/패턴에만 적용할 수도 있음 인터셉터 구현 방법 - 예시 코드 : https://young0105.t..

[Spring Boot] 필터 (Filter) [내부링크]

필터 (Filter) - 요청/응답을 처리하기 전에 특정 작업을 수행할 수 있는 컴포넌트 - 웹 애플리케이션 영역에서 관리 - Spring Container의 앞에 위치하며, Web Container (WAS) 내에서 실행됨 → 필터는 요청이 필터/서블릿에 도달하기 전에 요청을 가로챌 수 있음 # 실행 시점 - 클라이언트 요청이 실제 서블릿/컨트롤러에 도달하기 전에 실행됨 - 서블릿/컨트롤러의 응답이 클라이언트로 돌아가기 전에 실행됨 # 목적 i. 인증 및 인가 : 사용자의 자격 증명을 확인하고 요청된 리소스에 대한 액세스 권한을 검사함 ii. 로깅 : 요청 및 응답에 대한 로깅 수행 iii. 요청 및 응답 수정 : 헤더, 쿠키, 파라미터 등을 추가/수정/삭제 iv. CORS (Cross-Origin R..

[Spring Boot] JSP 템플릿 엔진 연결하기 [내부링크]

1. build.gradle 파일에서 의존성 추가 HTML 삽입 미리보기할 수 없는 소스 - Tomcat에서 JSP를 처리하기 위한 라이브러리 - Embedded Tomcat : 스프링부트에 내장된 Tomcat 서버를 사용하는 것 → 외부 Tomcat 서버는 설치/구성할 필요 없이 애플리케이션 실행 가능 - tomcat-embed-jasper : Embedded Tomcat에서 JSP를 처리하기 위해 jasper라는 JSP 컴파일러 관련 기능을 제공함 2. .jsp 파일들이 위치할 webapp 폴더 직접 생성 - src > main > webapp > WEB-INF 생성 3. application.properties를 application.yml로 변경하고 파일 수정 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] 예외 처리 (exception) [내부링크]

예외 처리 # 예외 처리할 클래스로 지정 - 일반적으로, 'handler'라는 패키지를 생성해서 사용함 HTML 삽입 미리보기할 수 없는 소스 # 예외를 처리하는 메서드 HTML 삽입 미리보기할 수 없는 소스 - 최상위 예외 클래스 : Exception → Exception으로 설정하면 따로 지정되지 않은 예외들은 모두 Exception의 메서드로 처리됨 (따로 지정된 예외들은 해당 메서드로 처리됨) # 예외에 관한 DTO를 활용한 응답 처리 DTO 예시 더보기 HTML 삽입 미리보기할 수 없는 소스 응답 메서드 예시 더보기 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] Validation 관련 : BindingResult 클래스 [내부링크]

# 관련 포스팅 - Validation 개념 : https://young0105.tistory.com/194 BindingResult 클래스 - @Valid에 대한 결과 값을 갖는 클래스 → 직접 예외에 대한 클래스를 컨트롤할 수 있음 (POST 요청에서 자주 사용됨) - 단독으로 매개변수에 들어가면 오류 발생 → 반드시 유효성 검사 대상인 다른 매개변수 뒤에 지정되어야 함 - Error에 대한 정보를 담는 DTO 클래스를 따로 만들어서 DTO 형식으로 에러 정보를 보낼 수도 있음 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] Validation (유효성 검사) [내부링크]

Validation - 예외를 방지하기 위해 미리 검증하는 과정 (방어적 코드를 대신해서 사용할 수 있음) - 검증해야 할 값이 많은 경우 코드의 길이가 길어짐 → 횡단 관심사 (AOP 기반) : 핵심 기능과의 분리 - 흩어져 있는 경우 어디에서 검증하는지 알기 어려움 → 재사용에 대한 한계가 있음 - 검증 로직이 변경되는 경우, 참조하는 클래스에서 로직이 변경되어야 하는 부분이 발생할 수 있음 # Validation 라이브러리 추가하기 (Gradle 빌드) 1. build.gradle 파일에 명시 HTML 삽입 미리보기할 수 없는 소스 2. build.gradle 파일 내 아무 곳이나 우클릭해서 메뉴 → [Gradle] → [Refresh Gradle Project] 클릭 관련 어노테이션 어노테이션 설..

[Java] 옵저버 패턴 (Observer pattern) [내부링크]

옵저버 패턴 (Observer pattern, 콜백 메서드) - 한 객체의 상태가 변하면 그 객체에 의존하는 다른 객체들에게 통지되고, 자동으로 내용이 갱신됨 - 호출이 되면 돌아감 - 구현한 기능은 필요에 따라 가져와서 사용할 수 있게 됨 - 예시] Swing의 이벤트 리스너 : https://young0105.tistory.com/83 예제 코드 1. 인터페이스 선언 더보기 HTML 삽입 미리보기할 수 없는 소스 2. 인터페이스를 포함 관계로 갖는 클래스 생성 더보기 HTML 삽입 미리보기할 수 없는 소스 3. 옵저버 패턴 설계 및 사용하기 더보기 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] AOP (관점 지향 프로그래밍) [내부링크]

AOP (Aspect Oriented Programming) - 프로그램을 구성하는 여러 모듈에서 공통적으로 사용하는 코드를 분리함 → 재사용성 & 유지보수성 향상 - 프로그램의 여러 지점에서 반복적으로 사용되는 기능을 모듈화함 → 코드 중복 감소 & 코드 가독성 향상 - 핵심적인 코드와 부가적인 코드(방어적 코드 등)를 분리함 : 핵심 기능에 영향을 미치지 않으면서, 부가적인 기능을 제공할 수 있음 - OOP (객체 지향 프로그래밍)의 보완(보조)적인 개념 # AOP 라이브러리 추가하기 (Gradle 빌드) 1. build.gradle 파일에 명시 HTML 삽입 미리보기할 수 없는 소스 2. build.gradle 파일 내 아무 곳이나 우클릭해서 메뉴 → [Gradle] → [Refresh Gradle..

[Spring Boot] ResponseEntity [내부링크]

ResponseEntity - 결과 데이터와 HTTP 상태 코드를 직접 제어할 수 있는 클래스 - ResponseEntity를 사용한 일관된 형식을 만들어서 return함으로써, API 개발이 편리해짐 HTML 삽입 미리보기할 수 없는 소스 - 상태 코드 : https://young0105.tistory.com/185 # ResponseEntity - 와일드 카드 ?를 사용함 → 상황에 따라 다른 타입을 리턴해야 할 때 사용할 수 있음

[Java] 전략 패턴 (Strategy pattern) [내부링크]

전략 패턴 (Strategy pattern) - 행위를 클래스로 캡슐화해서, 동적으로 행위를 자유롭게 변환할 수 있게 함 - '구조' 디자인 패턴 - Spring의 의존성 주입 (DI)을 전략 패턴을 이용해서 구현할 수 있음 절차 1. 인터페이스 선언 더보기 HTML 삽입 미리보기할 수 없는 소스 2. 선언한 인터페이스의 구현 클래스 생성 더보기 HTML 삽입 미리보기할 수 없는 소스 3. 중간 클래스 생성 - 사용자는 중간 클래스만 알고 있으면 기능을 이용할 수 있음 (내부 알고리즘을 알지 못해도 됨) 더보기 HTML 삽입 미리보기할 수 없는 소스 4. Main에서 사용하기 더보기 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] IoC (제어의 역전) / DI (의존성 주입) [내부링크]

IoC (Inversion Of Control, 제어의 역전) - 객체(인스턴스)의 생명주기 관리를 개발자가 아닌 Spring Container (IoC Container)가 모두 맡아서 함 → 제어의 역전 (프로그램의 제어 흐름이 뒤바뀜) : 실행의 제어권이 개발자에서 Spring Boot 프레임워크로 넘어감 → 제어 흐름의 일부/전부를 프레임워크가 제어함 → 프로그램의 유연성 & 재사용성 향상 - 소프트웨어 디자인 패턴 - Spring Container에 올라간 Bean 객체들은 모두 싱글톤 패턴으로 관리됨 - Spring의 목표 : 내부적으로 Servlet Container를 가지고 있지만, 개발자가 그에 대해 신경쓰지 않고 Spring Container에 대해서만 관리하도록 함 # Bean 객체 ..

[Spring Code] REST API - Controller 구현 예시 [내부링크]

Method : GET # Query String 방식의 데이터 파싱 처리 더보기 HTML 삽입 미리보기할 수 없는 소스 # Path Variable 방식의 데이터 파싱 처리 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : POST 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : PUT 더보기 HTML 삽입 미리보기할 수 없는 소스 Method : DELETE 더보기 HTML 삽입 미리보기할 수 없는 소스

[Spring Boot] MVC 패턴 [내부링크]

MVC 패턴 (Model-View-Controller Pattern) - 사용자 인터페이스로부터 비즈니스 로직을 분리함 → 서로 간의 영향을 받지 않고 쉽게 수정할 수 있도록 하는 소프트웨어 디자인 패턴 - Spring 프레임워크는 MVC 패턴을 준수함 # 모델 (Model) - 애플리케이션이 무엇을 할 것인지를 정의하는 역할 - 내부 비즈니스 로직을 처리하기 위함 - 데이터를 가진 객체 (DTO) - 모델의 상태에 변화가 있을 때, 컨트롤러와 뷰에 이를 전달함 → 뷰는 최신의 결과를 보여주며, 컨트롤러는 모델의 변화에 따라 적용 가능한 명령을 수행할 수 있음 관련 어노테이션 HTML 삽입 미리보기할 수 없는 소스 # 뷰 (View) - 화면에 무엇인가를 보여주는 역할 - 모델/컨트롤러가 보여주려 하..

[Java] 싱글톤 패턴 (Singleton pattern) [내부링크]

# 관련 포스팅 - Static 키워드 : https://young0105.tistory.com/40 싱글톤 패턴 (Singleton pattern) - 모든 프로그램을 통틀어서, 해당 클래스의 객체가 단 한 개만 생성되어야 하는 경우 사용하는 디자인 패턴 - '생성' 디자인 패턴 - static 키워드를 활용하여 구현 가능 - 코딩 컨벤션 : 싱글톤 패턴을 구현하기 위한 메서드 이름은 'getInstance'를 자주 사용함 - 한 번 생성되면, 어떤 java 파일에서든 동일한 객체 하나만 공유하며 사용하게 됨 → 항상 같은 객체임을 보장함 // 예시 // public class Company { // 1. 생성자를 private으로 선언함 private Company() {} // 2. private,..

[HTTP] 상태 코드 [내부링크]

상태 코드 설명 1xx 요청을 제대로 받았고, 처리가 진행 중임 - 100 (Continue) 2xx 요청이 제대로 처리됨 - 200 (OK) : 성공 - 201 (Created) : 생성 or 수정 (POST or 일부 PUT 요청 이후) 3xx 요청을 처리하려면 클라이언트가 추가 동작을 취해야 함 - 302 (Fount) : 다른 URL로 갈 것 4xx 클라이언트가 잘못된 요청을 보내어 처리에 실패함 - 400 (Bad Request) : 요청이 문법에 맞지 않음 - 403 (Forbidden) : 클라이언트가 리소스를 요청할 권한이 없음 - 404 (Not Found) : 리소스가 없음 5xx 클라이언트의 요청은 유효하지만, 서버에 에러가 발생함 - 500 (Internal Server Error)..

[개발 일지] 전자 도서관 Web 개발 프로젝트 - 결과 정리 [내부링크]

# 깃허브 주소 https://github.com/seoyounglee0105/Library_Web_Project # 설명 PPT # 주요 기능 시연 영상 # 일차별 개발일지 https://young0105.tistory.com/category/My%20Project/Library%20Web%20Project

[SQL] 서브 쿼리 [내부링크]

서브 쿼리 (내부 쿼리) - 쿼리 내에 존재하는 또 다른 쿼리 - 반드시 괄호로 감싸주어야 함 # 종류 1) 중첩 서브 쿼리 (Nested Sub Query) : WHERE 절에 사용하는 서브 쿼리 2) 인라인 뷰 (Inline View) : FROM 절에 사용하는 서브 쿼리 · 반드시 AS로 테이블 이름을 설정해주어야 함 3) 스칼라 서브 쿼리 (Scalar Sub Query) : SELECT 절에 사용하는 서브 쿼리 → 성능 저하 문제 때문에 사용을 권장하지 않음 # 장점 - 쿼리를 구조화함 → 쿼리의 각 부분을 명확히 구분할 수 있게 함 (가독성 UP) - 복잡한 JOIN, UNION 대신 사용할 수 있음 - 읽기 편리함

[Spring Boot] 파라미터 전달 방식 [내부링크]

쿼리 스트링 방식 (Query Parameter, Query String) - URL 뒤에 ?를 붙이고, 파라미터를 key-value 쌍으로 전달함 - 각 파라미터는 &로 구분됨 - 해당 파라미터의 key와 value는 =로 구분됨 - 브라우저의 캐시와 검색 엔진에서 높은 가중치를 부여함 ex) http://example.com/search?a=keyword&page=1 - 용이한 상황 : filtering, sorting, searching 경로 매개변수 방식 (Path Parameter, Path Variable) - URL 경로의 일부로 파라미터를 전달함 - {}로 변수를 감싸서, 변수 값이 들어갈 자리를 표시함 - RESTful API에서 사용됨 - URL 자체가 파라미터 정보를 전달함 ex) h..

[Spring Boot] 개요 [내부링크]

스프링 부트 (Spring Boot) - 자바 기반의 오픈 소스 프레임워크 - 스프링 기반 애플리케이션 개발을 단순화하고 빠르게 할 수 있게 만든 도구 # 특징 1) 개발 프로세스 간소화 - 자동 설정 - 내장 서버 : 따로 다운로드받지 않아도 사용 가능한 서버가 내장되어 있음 · 2.x.x 버전까지는 tomcat / 3.x.x 버전부터는 jetty - 의존성 관리 : 어떤 tool을 사용할지 기술하기만 하면 자동으로 HTTP 통신으로 받아옴 (기존처럼 따로 다운받아서 등록하지 않아도 됨) - 개발자들이 빠르게 프로젝트를 시작할 수 있게 도움 - 환경 설정 간소화 2) 관례에 따른 설정 원칙 - 개발자가 지정하지 않은 경우에도 기본 설정을 자동으로 적용 3) 독립 실행 가능한 애플리케이션 - 내장된 웹 ..

[Java] 스트림 (Stream) [내부링크]

스트림 (Stream) - java.util.stream (IO 스트림과 다름) - 컬렉션과 배열에서 데이터를 처리하는 기능 제공 - 자료의 대상과 관계없이 동일한, 일관성 있는 연산을 수행함 ( == 자료 처리에 대한 추상화가 구현됨) → 자료의 처리를 쉽고 간단하게 함 - 한 번 생성하고 사용한 스트림은 재사용할 수 없음 : 자료에 대한 스트림을 생성하여 연산을 수행하고 나면 스트림은 소모됨 → 다른 연산을 수행하려면 스트림을 다시 생성해야 함 - 스트림 연산은 기존 자료를 변경하지 않고, 새롭게 생성하는 것 : 자료에 대한 스트림을 생성하면 스트림이 사용하는 메모리 공간이 별도로 생성됨 → 연산이 수행되어도 기존 자료에 대한 변경은 발생하지 않음 # 스트림 연산 1) 중간 연산 : 여러 개의 연산이..

[JSP Code] 파일 업로드 및 조회 [내부링크]

# 관련 포스팅 - 파일 업로드 : https://young0105.tistory.com/178 오늘 배운 파일 업로드 방법을 복습할 겸 전자 도서관 프로젝트에 이미지 리뷰 기능을 추가했다. # 이미지를 포함한 리뷰 작성 더보기 Controller HTML 삽입 미리보기할 수 없는 소스 DAO HTML 삽입 미리보기할 수 없는 소스 # 이미지 리뷰 조회 더보기 리뷰 조회 (이미지 포함 리뷰, 미포함 리뷰 구분) HTML 삽입 미리보기할 수 없는 소스 DAO HTML 삽입 미리보기할 수 없는 소스 ReviewImage 테이블을 따로 만들어서, review_id를 외래키로 받아 기본키로 사용하고 기존 파일명과 UUID가 포함된 파일명을 각각 테이블에 저장했다.

[JSP Code] 외부 라이브러리 없이 파일 업로드하기 [내부링크]

코드 # JSP - form HTML 삽입 미리보기할 수 없는 소스 # 서블릿 HTML 삽입 미리보기할 수 없는 소스 - getPart() 메서드는 멀티 파트 폼 데이터를 처리하기 위해 사용됨 → 멀티 파트 폼 데이터 : HTTP 요청 메시지의 body에 있는 여러 개의 파트로 구성된 데이터

[JSP] 필터 (Filter) [내부링크]

필터 (Filter) - 매번 요청 들어오는 값들을 확인하고자 할 때 사용함 · 브라우저에서 웹 서버로 요청되기 전에 검사 · 웹 서버에서 브라우저로 응답되기 전에 검사 - 필요한 경우에만 사용해도 됨 · 유용한 예시 : request.setCharacterEncoding("UTF-8");를 필터에서 설정해주면 서블릿에서 반복하지 않아도 됨 # Filter Life-Cycle - init() : 처음 생성되는 과정 - doFilter() : 일하는 단계 - destroy() : 종료하는 단계 ⇒ 생성자 → init()은 처음 연결되었을 때만 실행됨 doFilter()는 연결될 때마다 실행됨 destroy()는 메모리가 해제되면 실행됨 필터 생성 방법 1. Filter 인터페이스의 구현 클래스 생성 HTM..

[개발 일지] 전자 도서관 Web 개발 프로젝트 7일차 (04/04) ~ 종료 [내부링크]

7일차 # 메인 화면 (index.jsp) - 대여량이 높은 순서대로 정렬하고, 15위 안에 드는 도서들을 랜덤으로 4개 뽑아 메인 화면에 보이게 함 # 에러 페이지 피드백 - UX를 더 신경쓰자. 1) 홈 버튼을 상단에 배치 (자리가 애매해져서 사용자명은 보이지 않게 함) 2) 리뷰 작성 버튼이 잘 보이도록 아이콘을 함께 배치

[JSP] 쿼리 파라미터 방식 (쿼리 스트링) [내부링크]

쿼리 파라미터 방식 (쿼리 스트링) - HTTP 메세지 시작 줄에 데이터를 추가해서 서버에 보내는 방식 → 이 방식을 이용하면 바디가 없는 GET 방식도 데이터를 전송할 수 있음 - &로 연결하면 여러 key-value를 보낼 수 있음 - 헤더에 담는 부분이라 용량이 적음 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스

[개발 일지] 전자 도서관 Web 개발 프로젝트 6일차 (04/03) [내부링크]

6일차 # 리뷰 작성 - 대여한 기록이 있으면서, 리뷰를 작성한 기록이 없는 도서에 대해서만 리뷰 작성 가능 - 리뷰 작성 가능한 도서가 있는 경우, 마이페이지에서 '리뷰 작성'을 클릭해서 작성 가능 # 도서별 리뷰 조회 - 리뷰 별점의 평균이 보이게 함 - 리뷰가 없다면 별 0개 (평가 없음) - 리뷰가 있다면 리뷰 개수가 출력되며, 클릭하면 리뷰 페이지로 이동함 → 리뷰 제목을 클릭하면 리뷰 상세 페이지로 이동함 # 리뷰 관리 - 해당 회원이 작성한 리뷰 목록 - 도서명을 클릭하면 해당 도서의 상세 페이지로 이동함 - 리뷰 제목을 클릭하면 해당 리뷰 페이지로 이동함 - 삭제하기를 누르면 리뷰가 삭제됨 앞으로 해야 할 것 - 메인 화면 - 오류 페이지 (7일차에 마무리 예정)

[개발 일지] 전자 도서관 Web 개발 프로젝트 5일차 (04/02) [내부링크]

5일차 # 마이페이지 - 메인 화면 - 회원 정보 (아이디, 이름, 전화번호, 이메일) · 전화번호 뒷 자리는 보이지 않도록 함 - 대여 중인 도서가 몇 권인지 · '대여 중인 도서'를 클릭하면 '내 서재' 탭으로 이동함 - 리뷰 작성 가능한 도서가 몇 권인지 · 6일차에 리뷰 기능 추가 후 연동할 예정 # 마이페이지 - 회원 정보 수정 - 비밀번호를 확인받은 후 진입 가능 - 아이디는 수정할 수 없음 - 이메일을 입력하지 않으면 null로 수정됨 - 전화번호가 중복되었거나 형식이 틀렸을 경우에는 실행되지 않으며, 메시지를 출력함 # 마이페이지 - 회원 탈퇴 - 탈퇴 시, 회원이 아직 반납하지 않은 책들의 대여 가능 여부를 true로 변경함 # 마이페이지 - 내 서재 - 반납하지 않은, 대여 중인 도서 ..

[개발 일지] 전자 도서관 Web 개발 프로젝트 4일차 (04/01) [내부링크]

4일차 - 대여 기능 추가 · 로그인되지 않았거나, 대여 가능 여부가 '불가능'일 때에는 대여하기 버튼이 보이지 않음 · 대여하면 book 테이블에서 해당 도서의 총 대여량이 +1되고, 대여 가능 여부가 불가능으로 변경됨 - 마이페이지 틀 · 메인 화면 · 회원 정보 수정 (+ 회원 탈퇴) · 내 서재 (대여 중인 도서, 대여 기록) · 리뷰 관리 (리뷰 작성하기, 내가 작성한 리뷰 조회하기)

[개발 일지] 전자 도서관 Web 개발 프로젝트 3일차 (03/31) [내부링크]

3일차 - 검색 기능 보완 · 기존에는 스페이스를 한 번 누르고 검색을 실행하면 공백이 포함된 모든 책들이 검색됨 · 조건문을 사용해서, 공백만 입력되었을 때는 검색되지 않도록 함 - 선택된 카테고리가 표시되도록 폰트 색 지정 - 정렬 기능 추가 : 가나다순, 최신 등록 순, 인기순 - 책 상세 페이지 · 나중에 리뷰 작성 및 조회 기능을 추가할 예정 · 대여 가능 여부가 true일 때에만 대여하기 버튼이 보이도록 함

[개발 일지] 전자 도서관 Web 개발 프로젝트 2일차 (03/30) [내부링크]

2일차 - 회원가입 보완 : 전화번호 형식 확인 - 로그인 기능 & 로그아웃 기능 → 상태에 따라 상단 메뉴가 바뀜 - 전체 조회 및 카테고리 조회 구현 → 이후 사진 or 제목을 클릭하면 상세 페이지로 넘어가게 구현할 예정 - 검색 조회 구현 → 스페이스 입력 시 검색이 작동하지 않도록 보완 필요

[개발 일지] 전자 도서관 Web 개발 프로젝트 1일차 (03/29) [내부링크]

개인 프로젝트 주제 도서관 서적 정보 및 대여 기능을 제공하는 전자 도서관을 웹 사이트로 구현하기 프로젝트 기간 03/29 ~ 04/04 깃허브 주소 https://github.com/seoyounglee0105/Library_web_project 개발 계획 1. 회원가입 2. 로그인 (세션 활용해서 로그인 정보 기억하기) - 로그인 전과 로그인 후의 header가 다르게 보이도록 설정하기 · 로그인 전 : 로그인 페이지, 회원가입 페이지 · 로그인 후 : 사용자명, 로그아웃 버튼, 마이페이지 3. 도서 카테고리 4. 도서 리스트 페이지 - 카테고리별 - 정렬 기능 (등록순, 인기순, 가나다순) · 인기순은 대여량 컬럼 값을 이용해서 정렬 5. 도서 상세 정보 페이지 - 제목, 표지 이미지, 저자, 출판..

[JSP Code] Java web으로 SQL CRUD 구현하기 [내부링크]

코드 # DB 연동 더보기 HTML 삽입 미리보기할 수 없는 소스 # TodoDTO 더보기 HTML 삽입 미리보기할 수 없는 소스 # TodoDAO 더보기 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스 # Servlet 더보기 HTML 삽입 미리보기할 수 없는 소스 실행 - css는 부트스트랩 4 사용

[JSP] JSTL (JSP Standard Tag Library) [내부링크]

사용하기 1. https://mvnrepository.com/artifact/javax.servlet/jstl 에서 jar 파일 다운받기 2. [webapp] - [WEB-INF] - [lib]에 jar 파일 복사해서 넣기 3. 프로젝트의 [Properties] - [Java Build Path] - [Libraries] - [Modulepath]에 jar 파일 넣기 4. JSTL을 사용할 JSP 파일의 상단부에 아래 코드 붙여 넣기 JSTL (JSP Standard Tag Library) - JSP 개발을 단순화하기 위한 태그 라이브러리 ex) → ${student} - RequestDispatcher를 이용해서 보낸 데이터를 더 쉽게 받아서 사용할 수 있음 HTML 삽입 미리보기할 수 없는 소스 # ..

[Java] 어댑터 패턴 (Adapter pattern) [내부링크]

어댑터 패턴 (Adapter pattern) - 호환되지 않는 클래스들을 함께 이용할 수 있도록 타 클래스의 인터페이스를 기존 인터페이스에 덧씌움 - 기존의 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 생성함 ⇒ 인터페이스를 이용하면 코드를 좀 더 유연하게 설계할 수 있음 HTML 삽입 미리보기할 수 없는 소스 HTML 삽입 미리보기할 수 없는 소스

[Java] 디자인 패턴 정리 [내부링크]

디자인 패턴 - 공통적으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴 - 장점 · 개발자 간에 원활한 소통 가능 · 소프트웨어 구조 파악 용이 · 재사용성 UP → 개발 시간 단축 · 설계 변경 요청에 대한 유연한 처리 - 단점 · 객체 지향 설계/구현에 대한 지식이 필요함 · 초기 투자 비용에 대한 부담 생성 패턴 - 객체를 생성하는 것과 관련된 패턴 # 싱글톤 패턴 (Singleton) - https://young0105.tistory.com/186 # 빌더 패턴 (Builder) - https://young0105.tistory.com/159 # 그 외 : Factory Method, Abstract Factory 구조 패턴 - 프로그램 내의 자료 구조 or 인터페이스 구조 등을 설..

[JSP] RequestDispatcher [내부링크]

RequestDispatcher - JSP와 Servlet 사이에서 request와 response를 전달하는 기능을 제공 · Servlet에서 JSP로 or JSP에서 Servlet으로 · 데이터를 공유하면서 같이 사용할 수 있음 - 사용 목적 · 웹 애플리케이션의 모듈화 · 재사용성 향상 - 요청 주소는 여전히 기존 주소로 유지됨 (비교 : sendRedirect 메서드는 주소도 바뀜) → 클라이언트는 전달받은 Servlet or JSP의 정확한 주소를 알지 못함 → 보안 good # 방식 1) forward() 메서드 사용 - 서버 내부에서만 작동함 - request와 response를 그대로 넘김 HTML 삽입 미리보기할 수 없는 소스 # 방식 2) include() 메서드 사용 - 다른 Serv..

[JSP] 쿠키와 세션 [내부링크]

# 관련 포스팅 - 쿠키와 세션 개념 : https://young0105.tistory.com/160 쿠키 (Cookie) - 쿠키(Cookie)는 JSP 내장 객체가 아니므로, 생성자로 생성해서 사용해야 함 - 서버에 최초로 접근하는 사용자에게는 addCookies 메서드를 사용해서 쿠키를 생성해 보냄 - 사용자가 서버에 다시 요청할 때, getCookies 메서드를 이용해서 쿠키 정보를 확인함 - setMaxAge 메서드를 이용해서 쿠키의 유효 시간을 설정할 수 있음 HTML 삽입 미리보기할 수 없는 소스 세션 (Session) - 세션(session)은 JSP 내장 객체이므로, 생성하지 않아도 사용할 수 있음 HTML 삽입 미리보기할 수 없는 소스

[JSP] JSP 내장 객체 3 (exception) & 에러 페이지 [내부링크]

exception 객체 - JSP 페이지에서 발생한 예외 정보를 다루는 객체 HTML 삽입 미리보기할 수 없는 소스 - 에러 메시지에는 코드 내용이 포함되기 때문에 에러 메시지는 거의 띄우지 않음 → 보안 상의 이유 때문에 사용자에게 코드를 보여주지 않는 것이 좋기 때문임 에러 발생 시, 에러 전용 페이지로 이동시키기 HTML 삽입 미리보기할 수 없는 소스

[JSP] web.xml 파일 & JSP 내장 객체 2 (config, application) [내부링크]

web.xml 파일 - Java 웹 애플리케이션에서 사용하는 배치 지시자 파일 - 웹 애플리케이션이 서버에 배포되는 시점의 설정 정보를 담고 있는 XML 파일 - 기본 설정을 하나의 프로젝트마다 재정의할 수 있음 - 웹 서버가 시작될 때 단 한 번만 로딩됨 → 서버가 시작된 후에는 수정해도 수정 사항이 적용되지 않음 → 설정을 변경하려면 해당 애플리케이션을 다시 배포해야 함 welcome-file : 처음 서버에 접속했을 때 표시하는 파일 · 순서대로 확인해서 가장 처음 발견된 파일을 표시함 · 파일 경로를 포함하지 않고 root context(프로젝트명)까지만 작성해도 그 파일로 들어가짐 HTML 삽입 미리보기할 수 없는 소스 config 객체 - 현재 JSP 페이지의 환경 정보(서블릿 설정 정보 ..

[HTTP] 클라이언트의 인증 정보 (쿠키, 세션) [내부링크]

HTTP 프로토콜의 특징 ① Connectionless (↔ 소켓 통신의 커넥션 풀) - 하나의 요청(request)에 대한 하나의 반응(response)을 한 후, 연결을 종료함 → 새 요청이 있을 때마다 항상 새로운 연결을 맺음 ② Stateless - 통신이 끝난 후 상태 정보를 저장하지 않음 → 이전 연결에서 사용한 데이터를 다른 연결에서 요구할 수 없음 ⇒ 웹 서버는 클라이언트를 기억할 수 없음 (쿠키 or 세션 필요) 쿠키 (Cookie) - Key와 Value로 이뤄진 일종의 단위 - 서버에서 생성되어 클라이언트의 브라우저에 저장됨 → 클라이언트가 다시 서버에 요청을 보낼 때 HTTP 메시지 헤더에 포함되는 정보 # 작동 방식 1. 서버가 클라이언트에게 쿠키를 발급함 2. 클라이언트는 서버에..

[Java] 빌더 패턴 (Builder pattern) [내부링크]

빌더 패턴 (Builder pattern) - 객체를 생성하는 클래스와 객체를 표현하는 클래스를 분리하는 디자인 패턴 - '생성' 디자인 패턴 - 생성자의 매개변수로 값을 받아 멤버 변수에 대입할 때에는 실수가 발생할 수 있음 (매개변수가 많을수록 포지셔널을 지키기 어려워짐) → Builder 패턴은 set 메서드의 대상이 되는 멤버 변수 이름이 명확하게 제시되므로, 실수 방지 HTML 삽입 미리보기할 수 없는 소스

[JSP] JSP 스크립트 [내부링크]

JSP 스크립트 요소 - JSP 페이지에서 Java 코드를 사용할 수 있도록 하는 요소 - JSP 페이지에서 동적으로 HTML을 생성하거나, DB와 연동해서 데이터 처리 가능 # 스크립트릿 (ScriptLet) - JSP 페이지에서 Java 코드를 실행할 수 있음 - JSP 페이지 어디든지 작성할 수 있음 - HTML과 Java 코드를 혼합해서 사용할 수 있음 - 출력 결과를 지정하면 출력할 수 있음 # 표현식 (Expression) - JSP 페이지에서 Java 코드의 결과 값을 출력할 수 있음 - HTML 태그 내부에서만 작성할 수 있음 - 출력할 값이 null인 경우, 빈 문자열이 출력됨 - 표현식 안에 아무것도 작성하지 않으면 오류 # 선언 (Declaration) - JSP 페이지에서 전역변수,..

[JSP] JSP 내장 객체 1 (request, response, session, out) [내부링크]

JSP 내장 객체 - JSP 페이지에서 자동으로 생성되어 사용할 수 있는 객체 - JSP 컨테이너가 JSP 페이지를 실행하는 동안에 자동으로 생성됨 - JSP 페이지에서 명시적으로 선언하지 않아도 사용 가능 request 객체 - HTTP 요청 정보를 다루는 객체 HTML 삽입 미리보기할 수 없는 소스 - GET 방식에서는 request 사용 시에 UTF-8로 처리되어 들어오기 때문에, 따로 인코딩 표준을 지정하지 않아도 됨 - POST 방식에서는 인코딩 표준을 지정해주어야 함 response 객체 - HTTP 응답 정보를 다루는 객체 - MIME 타입 : https://young0105.tistory.com/156 HTML 삽입 미리보기할 수 없는 소스 session 객체 - 세션 정보를 다루는 객체 ..

[HTTP] MIME 타입 [내부링크]

MIME 타입 - 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘 - 웹에서 파일의 확장자는 큰 의미가 없음 → 각 문서와 함께 올바른 MIME 타입을 전송하도록 정확히 설정해야 함 # 대표적인 MIME 타입 - text/plain (기본값), text/html, text/css, text/javascript - application/json - application/x-www-form-urlencoded : form 태그의 MIME 타입

[JSP] URL Mapping [내부링크]

URL Mapping - 외부에서 요청하기 쉽도록 특정 문자를 이용해서 접근을 쉽게 할 수 있도록 하는 기술 # 과정 - 해당 요청에 맞는 적절한 java 파일을 선택함 → 동적 컴파일 : 실행 시점에 .class 파일을 만듦 → .obj 파일로 변환 → response Servlet의 URL Mapping - 클라이언트의 HTTP 요청을 처리할 서블릿을 선택하는 방법을 지정함 # 방법 1 : web.xml 파일에서 설정 HTML 삽입 미리보기할 수 없는 소스 # 방법 2 : 어노테이션으로 설정 (간편함) HTML 삽입 미리보기할 수 없는 소스

[JSP] JSP와 Servlet(서블릿) [내부링크]

JSP (Java Server Pages) - 서버 측에서 동적인 웹 페이지를 생성하기 위한 기술 (Java + HTML) - 템플릿 엔진 - HTML 문서 안에 자바 코드를 포함시킬 수 있는 자바 기반의 서버 사이드 스크립트 언어 (서버 사이드 스크립트 언어 : 웹 서버 옆에서 작동하는 언어) # 동작 과정 1. 클라이언트가 웹 브라우저를 통해 JSP 페이지에 접속함 2. JSP 컨테이너(Tomcat)는 JSP 파일을 읽어 Java 코드로 변환하고, 컴파일해서 Servlet 클래스 파일 생성 3. 생성된 Servlet 클래스 파일을 실행해서 동적인 HTML 문서 생성해서 클라이언트에게 전송 Servlet (서블릿) - 웹 컨테이너 안에 있는 각각의 클래스(객체) - 웹 컨테이너 안에 실제 동작하는 객체..

[HTTP] Web Server & WAS (Web Application Server) [내부링크]

웹 서버 (Web Server) - 클라이언트(웹 브라우저)에서 전송된 HTTP 메시지를 핸들함 - 정적 리소스만 처리할 수 있음 - 동적 리소스 제공이 필요한 경우, HTTP Request 객체를 WAS에게 전달함 ex) Apache 웹 애플리케이션 서버 (WAS, Web Application Server) - 비즈니스 로직을 처리하여 동적 컨텐츠를 제공하는 서버 - 정적 리소스도 처리할 수 있고, 동적 리소스도 처리할 수 있음 - WAS 컨테이너 안에는 Service, Controller 등의 객체가 포함되어 있음 ex) tomcat # 웹 프로그램 - 인터넷 서비스를 이용해서 서로 다른 구성요소들이 통신할 수 있는 프로그램 웹 프로그램의 동작 원리 1) 정적 리소스 (.html, .css, .j..

[JSP] Java Web 개발 환경 세팅 [내부링크]

톰캣 (Tomcat) - Java Servlet과 JSP를 실행하기 위한 웹 애플리케이션 서버(WAS) 내에 존재하는 웹 컨테이너 - 클라이언트 요청에 대해 정적인/동적인 웹 페이지를 생성하여 제공함 - HTTP 프로토콜 사용 Eclipse EE 버전 다운로드 - Eclipse IDE for Enterprise Java and Web Developers # 다운 받은 후 설정 1) 상단 메뉴 [Windows] → [Preferences] → 'encoding' 검색 → 전부 'UTF-8'로 설정 2) 상단 메뉴 [Help] → [Eclipse Markgetplace] → 'web developer' 검색 → 'Eclipse Enterprise Java and Web Developer tool' 설치 톰캣..

[HTTP] 웹 브라우저와 웹 렌더링 [내부링크]

웹 브라우저 (Web Browser) - 사용자와 웹 서버 간의 HTTP 통신을 중개하며, 서버로부터 수신한 리소스를 시각화하는 소프트웨어 - 뛰어난 사용자 경험(UX) 제공 : 사용자는 브라우저 내부에서 어떠한 연산이 일어나는지 알지 못하며, 알 필요가 없음 # 웹 브라우저의 기본 동작 1. URL 분석 : 웹 브라우저의 주소 창에 입력된 주소 해석 2. DNS 요청 : 입력된 주소 탐색 DNS (Domain Name Server) : Host의 도메인 이름을 IP로 변환하거나, IP를 도메인 이름으로 변환함 3. HTTP를 통해 해당 서버에 요청 4. 서버의 HTTP 응답 수신 5. 리소스 다운로드 및 웹 렌더링 (HTML, CSS, JavaScript) 웹 렌더링 (Web Rendering) -..

[HTTP] REST API 방식 [내부링크]

확장 프로그램 Talend - https://chrome.google.com/webstore/detail/talend-api-tester-free-ed/aejoelaoggembcahagimdiliamlcdmfm/related?hl=ko API - Application : 운영체제를 제외한 모든 프로그램 - Programming : 코드를 통해서 프로그램을 만드는 과정 - Interface : 표준, 규칙, 강제성이 있는 약속 REST API - 기존 : GET, POST 방식만 사용함 → POST는 추가/수정/삭제가 가능한데, 이를 컴퓨터가 구분할 수 있도록 하기 번거로워서 REST API 등장 ① GET : 정보 요청 (서버 자원 요청) · HTTP 메시지 body 부분에 데이터 X · 정보를 전송한 ..

[Java] 람다 표현식 (Lambda expression) [내부링크]

함수형 프로그래밍 방식 (FP, Functional Programming) - 함수를 기반으로 하는 프로그래밍 입력 방식 - 매개변수로 전달받는 입력 외에는 외부 자료를 사용하지 않음 → 여러 자료가 동시에 수행되는 '병렬 처리' 가능 - 순수 함수를 구현하고 호출함 → 외부 자료에 부수적인 영향(side-effect)을 주지 않도록 구현함 - 컴파일러는 데이터 타입을 추론할 수 있음 → 코드를 간소화해서 사용하는 '람다 표현식' 등장 람다 표현식 (Lambda expression) HTML 삽입 미리보기할 수 없는 소스 # 람다식을 사용하기 위한 선행 조건 : 하나의 추상 메서드만 존재하는 인터페이스가 먼저 생성되어 있어야 함 (함수형 인터페이스) → 오류를 막기 위해 인터페이스에 @Functional..

[Java] 래퍼 클래스 (Wrapper class) [내부링크]

# 관련 포스팅 - 기본 자료형 : https://young0105.tistory.com/7 래퍼 클래스 (Wrapper class) - 기본 자료형을 객체로 다루기 위해서 사용하는 클래스 기본 자료형 래퍼 클래스 byte Byte char Character int Integer float Float double Double boolean Boolean long Long short Short 박싱 (Boxing) - 기본 자료형 → 래퍼 클래스 변환 HTML 삽입 미리보기할 수 없는 소스 언박싱 (UnBoxing) - 래퍼 클래스 → 기본 자료형 변환 HTML 삽입 미리보기할 수 없는 소스 문자열을 다른 자료형으로 변환하기 HTML 삽입 미리보기할 수 없는 소스

[HTTP] 웹 서비스와 웹 리소스 (URI & URL) [내부링크]

웹 (Web) - 인터넷을 기반으로 구현된 서비스 중 HTTP를 이용하여 정보를 공유하는 서비스 - 인터넷 통신망을 활용하여 구현된 전 지구적 정보 공간 - HTTP : 웹 상에서 서로 통신을 하기 위해 정해둔 일종의 규칙 1) 웹 서버 (Web Server) : 웹에서 정보를 제공하는 주체 2) 웹 클라이언트 (Web Client) : 웹에서 정보를 요구하여 제공받는 이용자 웹 서비스 - 웹 상에서 제공되는 서비스 - 이용자의 요청을 해석/가공하여 필요한 정보/기능을 제공하는 능동형 서비스 1) 프론트엔드 (Front-end) : 이용자의 요청을 받는 부분 · 이용자에게 직접 보여지는 부분 · '웹 리소스'로 구성됨 : 페이지가 보여주는 정보들은 모두 웹 리소스에 명시되어 있음 ex) 글 내용, 텍스트..

[HTTP] 통신 프로토콜 - HTTP와 HTTPS [내부링크]

# 요청(Request)과 응답(Response) - 클라이언트는 웹 서버에게 특정 리소스를 지정해서 제공해달라고 '요청' - 서버가 해당 요청에 대응되는 동작을 통해 클라이언트에서 리소스를 반환하며 '응답' → 프로토콜 : 이러한 규격화된 상호작용에 적용되는 '평등한' 약속(규약) (비교 : 인터페이스는 '강제성이 있는' 약속) ex) TCP/IP : 네트워크 통신의 기초가 되는 프로토콜 HTTP : 웹 애플리케이션이 사용하는 프로토콜 FTP : 파일을 주고받을 때 사용하는 프로토콜 HTTP (Hyper Text Transfer Protocol) - 서버와 클라이언트의 데이터 교환을 요청과 응답 형식으로 정의한 프로토콜 # 기본 메커니즘 - 클라이언트가 서버에게 요청하면 서버가 응답하는 것 : 웹 서버..

[HTTP] 인코딩과 포트 [내부링크]

인코딩 표준 # 인코딩 - 문자를 컴퓨터가 인식할 수 있는 숫자로 변환하는 과정 # 아스키코드 (ASCII) - 7비트 데이터에 대한 인코딩 표준 - 알파벳과 특수문자 등을 표현할 수 있음 - 초기에는 각 문자권마다 고유한 인코딩 표준을 사용함 → 이러한 방식은 인코딩 호환성이 좋지 않음 ex) 한글이 뛝씷낅 or 이런 식으로 깨지는 것은 인코딩이 호환되지 않아 발생하는 문제 → 해결 : 유니코드 # 유니코드 (Unicode) - 목표 : 모든 언어의 문자를 하나의 표준에 담음 - 하나의 문자를 최대 32개의 비트로 표현할 수 있음 포트 - 클라이언트가 서버의 포트(항구)에 접근해서 데이터를 내려 놓음 → 서버가 클라이언트에 보낼 데이터를 싣고 돌려보냄 # 네트워크 포트 (Network Port)..

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 10일차 (03/20) ~ 종료 [내부링크]

10일차 # 리뷰 내용 조회 - 사진이 있는 리뷰와 없는 리뷰의 레이아웃을 다르게 설정함 - 상품 상세 페이지에서 최근 작성된 리뷰 7개까지 조회 가능 # 마이페이지 - 회원 등급 정보 - 회원 적립금 정보 - 주문 내역 조회 구현하고 싶었던 것들이 더 있었는데 (찜 목록 등) 이번 주부터 배우는 웹 개발 공부에 집중해야 할 것 같아서 10일차로 프로젝트를 마무리했다. 깃허브 주소 https://github.com/seoyounglee0105/ShopDB_GUI_Project

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 9일차 (03/19) [내부링크]

9일차 # 리뷰 작성 - 회원이 리뷰를 작성하려면 해당 상품에 대한 주문 이력이 있어야 하며, 이전에 리뷰를 작성한 이력이 없어야 함 - 작성 취소 버튼을 누르면 마이페이지로 되돌아감 - 왼쪽 상단의 상품 이름 콤보박스에는 리뷰를 작성할 수 있는 상품들의 이름만 표시됨 → 리뷰를 작성할 상품이 존재하지 않으면 자동으로 마이페이지로 되돌아감 - 리뷰 작성 완료 시, 상품 가격의 5%만큼의 적립금을 지급함 - 별점은 가장 오른쪽 별점 버튼을 누르면 거기까지 채워지며, 채워진 별 5개는 5점, 4개는 4점, ... 이런 식으로 반영됨 # 리뷰 조회 - 상품 상세 페이지에서 리뷰 별점/제목 확인 가능 (본문 조회는 아직 기능 구현 X) # 코드 리팩토링 - 각 패널/프레임에서 로그인된 memberDTO의 정보를..

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 8일차 (03/18) [내부링크]

8일차 # 주문하기 - 해당 회원의 총 주문 금액에 따라 회원 등급 변경 · 500,000원 이상 → Gold · 100,000원 이상 → Silver · 그 외 → Bronze (기본값) · 회원 등급에 따라 프레임의 왼쪽 상단 아이콘도 변함 - 주문될 때마다 해당 상품의 판매량(sales 컬럼) 갱신 → ProductListPanel에 해당 상품의 판매량도 표시하게 함 # 상품 검색 기능 추가 # 상품 상세 페이지 편의성 개선 - 수량 조정 버튼 추가

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 7일차 (03/17) [내부링크]

7일차 # 상품 상세 페이지 - 상품 목록에서 사진을 누르면 상세 페이지 프레임 생성 → 나중에 판매량, 리뷰도 출력할 예정 # 장바구니 - 상세 페이지에서 구매 수량을 정해서 장바구니에 추가 가능 → 해당 상품이 이미 장바구니에 존재할 경우, 수량을 더 추가할 것인지 묻고 처리함 - 장바구니에는 최대 10 종류의 상품을 넣을 수 있음 - 오른쪽 상단의 '장바구니'를 누르면 해당 회원의 장바구니 조회 가능 → 해당 상품 옆에 있는 x 버튼을 누르면 장바구니에서 제거됨 # 주문하기 - 장바구니에서 '주문하기'를 누르면 현재 장바구니에 담겨 있는 물품들에 대한 주문 페이지 프레임 생성 - 현재 회원이 가진 적립금 사용 가능

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 6일차 (03/16) [내부링크]

6일차 - product 데이터 총 57개 삽입 - 선택된 카테고리/정렬기준에 폰트 색을 적용해서 가시성 UP - 조회 데이터가 7개 이상인 경우 다른 페이지가 생성되며, ▷ 버튼을 누르면 다음 페이지를 볼 수 있게 함 - 정렬 기능 추가 (가나다순, 신상품순, 판매량순) → 현재 판매량 컬럼은 모두 0인 상태라서 판매량순은 아직 의미있는 결과 X 실행

[Java Code] 웹 페이지의 JSON을 가져와 DB 테이블에 삽입하기 [내부링크]

album 테이블 더보기 HTML 삽입 미리보기할 수 없는 소스 DBHelper 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumDao 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumService 더보기 HTML 삽입 미리보기할 수 없는 소스 AlbumController 더보기 HTML 삽입 미리보기할 수 없는 소스 Main 더보기 HTML 삽입 미리보기할 수 없는 소스 실행 후 SQL 테이블 확인

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 5일차 (03/15) [내부링크]

5일차 - ShopFrame의 좌측에 카테고리 메뉴 패널 생성 - 프로그램을 완전히 종료하는 Exit 버튼 생성 - Product 테이블 설계 + Category 테이블 설계 - Product 테이블의 DTO, DAO, IDAO, Service, Controller 클래스 설계 - Product 테이블과 ShopFrame 연결 · 한 페이지에 총 6개까지의 상품이 보이도록 함 (6일차부터는 7개 이상의 상품을 조회할 때 페이지가 나뉘도록 구현할 것) - mainPanel과 productListPanel 간의 전환은 setVisible 메서드를 활용함 실행

[Java Code] Gson 클래스를 활용한 JSON Phasing [내부링크]

준비물 1) Gson 1. https://mvnrepository.com/artifact/com.google.code.gson/gson/2.8.9에서 jar 다운받기 2. 해당 프로젝트의 [Properties]로 들어가서 [Libraries] 탭 → [Modulepath] 선택 3. 오른쪽의 [Add External JARs...] → jar 파일 선택 4. 해당 프로젝트의 'module-info.java' 파일로 들어가서 아래 코드 입력 HTML 삽입 미리보기할 수 없는 소스 2) Json 연습용 데이터 사이트 : https://jsonplaceholder.typicode.com/users 사이트에서 데이터 읽어오기 HTML 삽입 미리보기할 수 없는 소스 JSON 데이터를 담을 클래스 설계 - JSON..

[Java] JSON [내부링크]

JSON (JavaScript Object Notation, 제이슨) - Key-Value 쌍 or 배열 형태의 데이터를 텍스트(문자열) 형식으로 표현하는 것 → Java에서 JSON은 '특정한 구조(약속)가 있는 문자열' - 경량의 데이터 교환 형식 → 서버와 클라이언트 간의 교류에서 자주 사용됨 - 사람과 기계 모두 이해하기 쉬우며 용량이 적음 → JSON이 XML을 대체해서 데이터 전송에 많이 사용됨 - JSON 문서 형식은 자바스크립트 객체의 형식을 기반으로 만들어짐 → 자바스크립트를 이용해서 JSON 형식의 문서를 쉽게 자바스크립트 객체로 변환할 수 있음 - Key에는 항상 쌍따옴표("")를 사용함 # JSON 데이터 타입 - String - number - boolean - object (객체..

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 4일차 (03/14) [내부링크]

4일차 - MemberDAO 리팩토링 · 기존 : selectById, selectByPhoneNumber, selectByIdAndPassword, selectByIdAndPhoneNumber · 개선 : 메서드 오버로딩 → select (조건 1개), select (조건 2개) · 매개변수로 컬럼명(String)과 값을 받음 → 오타 방지를 위해 MemberService에 member 테이블의 컬럼명들을 String[]로 정의해둠 - LoginFrame 편의성 개선 · idTextField에서 Enter 키를 누르면 pwField로 포커스가 옮겨짐 · pwField에서 Enter 키를 누르면 loginButton이 눌러짐 - shopFrame 상단 패널 설계 · 로그인한 회원의 DTO 객체 정보를 받..

[SQL] DCL - 사용자 생성과 권한 설정 (GRANT) [내부링크]

사용자 생성 CREATE USER '사용자명'@'호스트명' IDENTIFIED BY '비밀번호'; -- 홈에서 해당 사용자명으로 사용자 생성 가능 -- Username 항목에 사용자명 입력 - 사용자명 : 생성할 계정의 이름 - 호스트명 : 해당 계정이 접근 가능한 호스트 이름 (% : 모든 호스트) - 비밀번호 : 해당 계정의 비밀번호 사용자 호스트 정보 조회 USE mysql; SELECT user, host FROM user; - host : localhost → 현재 IP 주소에서만 접근 가능 - host : % → 모든 IP 주소에서 접근 가능 사용자 상세 권한 조회 -- N (기본값) : 해당 권한이 없음 -- Y : 해당 권한이 있음 USE mysql; SELECT * FROM user WH..

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 3일차 (03/13) [내부링크]

3일차 - id 형식 힌트 추가 (글자 수 제한) → phoneNumber와 id의 힌트가 그대로 남아 있으면 회원 가입 실행 X - member 테이블의 phone_number를 UNIQUE 컬럼으로 변경 & 중복 확인 기능 추가 - 회원 가입 시 phoneNumber 형식 확인 → 처음 '-'의 위치는 인덱스 3번, 마지막 '-'의 위치는 인덱스 8번, 문자열 길이는 13 - id나 전화번호가 중복되었을 때에는 회원 가입 실행 X - 코드 리팩토링 · memberSignUp 메서드의 매개변수를 MemberDTO 객체로 변경 · memberLogin 메서드의 반환 값을 MemberDTO 객체로 변경 → 로그인 시 다음 프레임에 MemberDTO 객체를 전달할 예정 (비밀번호는 민감한 정보이므로 제외하고..

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 2일차 (03/12) [내부링크]

2일차 - 비밀번호 찾기 기능 구현 MemberDAO - 비밀번호 찾기 기능 더보기 // 비밀번호 찾기 기능 @Override public String memberPwFind(String id, String phoneNumber) { String resultPw = null; String sql = " SELECT * FROM member WHERE id = ? AND phone_number = ? "; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.setString(2, phoneNumber); rs = pstmt.executeQuery(); // 행이 존재한다면 while문으로 들어감 while (rs.next()) {..

[Java Swing] getText()를 사용할 수 없는 JPasswordField에서 값 가져오기 [내부링크]

# JPasswordField는 다른 텍스트 박스와 달리, getText()로 문자열을 가져올 수 없음 - JPasswordFied의 getPassword() 메서드는 char[] 값을 반환함 → String 타입으로 변환해주어야 함 char[] pwChar = pwField.getPassword(); String pw = new String(pwChar); // 코드 간소화 String pw = new String(pwField.getPassword());

[개발 일지] 반려동물 용품 쇼핑몰 GUI 구현 프로젝트 1일차 (03/10) [내부링크]

개인 프로젝트 주제 Swing을 이용하여 반려동물 용품 쇼핑몰 DB 접근 프로그램을 GUI로 구현하기 프로젝트 기간 시간이 날 때마다 비정기적으로 진행할 예정 깃허브 주소 https://github.com/seoyounglee0105/ShopDB_GUI_Project 개발 계획 1. 로그인 프레임 - 회원가입 버튼 - 비밀번호 찾기 버튼 2. 회원가입 프레임 - 아이디 중복 확인 기능 - 항목 형식 힌트 (글자 수 제한 등) - member 테이블에 회원 정보를 INSERT하는 기능 - 필수 값 중 입력되지 않은 값이 있으면 회원가입 거부 3. 비밀번호 찾기 프레임 4. 마이페이지 프레임 - 정보 수정 버튼 (비밀번호를 다시 입력받아서 본인 확인) - 주문 내역 - 쿠폰함 - 장바구니 5. 쇼핑몰 홈 프..

[Java] Statement와 PreparedStatemet [내부링크]

- 문자열들을 SQL로 변경하거나, SQL 문을 실행시켜주는 인터페이스 - SQL 문 실행 시 · SELECT 문은 executeQuery 메서드 사용 → ResultSet(결과 집합) 반환 · DML 문은 executeUpdate 메서드 사용 → int(변경이 적용된 레코드 수) 반환 - DB와 Java 연동 코드 : https://young0105.tistory.com/126 Statement // 쿼리문 작성 (마지막에 공백을 하나 입력해야 오류 위험 감소) String sqlFormat = "SELECT * FROM 테이블명 WHERE 컬럼명1 = '%S' "; String sql = String.format(sqlFormat, targetValue)); // conn : Connection 객체..

[SQL] DML - 데이터 조회 (SELECT) & 집계 함수 [내부링크]

데이터 조회 : SELECT 문 SELECT [DISTINCT] 컬럼명1 [AS 별칭], 컬럼명2, ... -- 전체 조회 : SELECT * FROM 테이블명 [AS 별칭] [JOIN 구문] [WHERE 조건] -- 조건에 맞는 데이터만 그룹화 [GROUP BY 컬럼명1, 컬럼명2, ...] [HAVING 그룹조건] [ORDER BY 컬럼명1 [ASC | DESC], 컬럼명2, ...] [LIMIT 숫자] | [LIMIT 숫자a 숫자b]; -- 여러 테이블 조회 시, '테이블명.컬럼명'으로 입력해야 정확함 # [DISTINCT] - 선택한 컬럼들에 대해서 중복되는 값을 가진 레코드들을 제거함 # [WHERE] - WHERE 조건절 설명 : https://young0105.tistory.com/117 #..

[SQL] 집계 함수 [내부링크]

집계 함수 - GROUP BY가 지정되지 않았을 경우, 조회되는 모든 데이터에 대한 결과를 출력함 - GROUP BY가 지정되어 있을 경우, 그룹에 대한 결과를 출력함 - NULL 값을 가진 레코드를 제외하고 수행함 - 컬럼명에 'DISTINCT'를 설정하면 중복되지 않은 레코드에 대해서만 수행함 집계 함수 설명 COUNT(*) COUNT([DISTINCT] 컬럼명) 레코드 수 (* 또는 NOT NULL 컬럼에 대해서 사용하는 것을 권장) SUM(*) SUM([DISTINCT] 컬럼명) 합계 AVG(*) AVG([DISTINCT] 컬럼명) 평균 MAX(*) MAX([DISTINCT] 컬럼명) 최댓값 MIN(*) MIN([DISTINCT] 컬럼명) 최솟값 STD(*) STD([DISTINCT] 컬럼명) 표..

[Java Code] Java로 SQL CRUD 구현하기 [내부링크]

- DTO, DAO 설명 : https://young0105.tistory.com/125 # 사용된 인터페이스 1) Connection 2) Statement 3) ResultSet 코드 # DTO public class BuyDTO { // 테이블 구조 확인하고 멤버변수 선언하기 private String userName; private String productName; private int price; private int amount; // 생성자 public BuyDTO(String userName, String productName, int price, int amount) { this.userName = userName; this.productName = productName; this.pr..

[Java] DTO/VO, DAO [내부링크]

DTO & VO # DTO (Data Transfer Object, 데이터 전송 객체) - 계층 간 데이터 교환을 하기 위해 사용하는 객체 - request와 response에서 주고받는 객체 - 로직을 가지지 않음 (getter & setter 메서드, 멤버변수, 생성자만 가짐) - 가변 - DB의 각 컬럼을 DTO의 각 멤버변수로 매핑함 # VO (Value Object, 값 객체) - 데이터 전송과 저장을 목적으로 사용되는 객체 - 불변 (setter 메서드 X) - read-only (읽기만 가능) DAO (Data Access Object) - 데이터에 접근하기 위한 객체

[Java Code] Java와 MySQL 데이터베이스 연결하기 [내부링크]

# 사전 준비 1. https://dev.mysql.com/downloads/file/?id=515796 에서 파일 다운받기 2. 프로젝트 우클릭 → [Properties] 3. 아래 경로로 들어가서 다운받은 파일 내에 있는 .jar 파일을 추가하기 # 필요한 정보 1) MySQL 계정 이름, 비밀번호 2) URL 주소 (포트번호, DB명 필요) # 사용된 인터페이스 1) Connection 2) Statement 3) ResultSet 코드 # DB와 연결하는 클래스 설계 - format 메서드 사용법 : https://young0105.tistory.com/64 public class DBClient { // 변하지 않는 정보들은 상수로 선언 private static final String DB_H..

[Java] 명칭 표기법 (카멜, 파스칼, 스네이크, 헝가리안) [내부링크]

# 카멜 표기법 (Camel Case) - 여러 단어가 이어지면 첫 단어 시작만 소문자로 표시하고, 각 단어의 첫 글자는 대문자로 지정함 - Java에서 변수명을 표기할 때 주로 사용됨 ex) inputFunction # 파스칼 표기법 (Pascal Case) - 식별자 표기 시에 여러 단어가 이어지면 각 단어의 첫 글자를 대문자로 지정함 - Java에서 클래스명을 표기할 때 주로 사용됨 ex) InputFunction # 스네이크 표기법 (Snake Case) - 식별자 표기 시에 여러 단어가 이어지면 단어 사이에 언더바(‘_’)를 넣음 - Java에서 상수명을 표기할 때 주로 사용됨 (+ SQL에서는 변수명 표기 시 사용) ex) input_function # 헝가리안 표기법 (Hungarian Ca..

[SQL] 함수 (숫자, 문자열, 날짜/시간) [내부링크]

숫자 함수 함수 기능 CEIL(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 올림 n이 명시되었다면 소수점 n번째 자리까지 올림 ROUND(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 반올림 n이 명시되었다면 소수점 n번째 자리까지 반올림 FLOOR(숫자, [n]) n이 명시되지 않았다면 정수 자리까지 내림 n이 명시되었다면 소수점 n번째 자리까지 내림 ABS(숫자) 절댓값으로 변환 FORMAT(실수, n) 실수를 소수점 n번째 자리까지만 출력 SIGN(숫자) 음수면 -1 반환 0이면 0 반환 양수면 1 반환 - 집계 함수 : https://young0105.tistory.com/127 문자열 함수 함수 기능 CHAR_LENGTH('문자열') 문자열 길이 (공백 포함) LENGTH('문자..

[SQL] 조인 (JOIN) [내부링크]

조인 (JOIN) - 두 개의 테이블을 연결하여 데이터를 검색하는 방법 # 다중 조인 SELECT * FROM 테이블1 LEFT JOIN 테이블2 ON 테이블1.Key = 테이블2.Key LEFT JOIN 테이블3 ON 테이블1.Key = 테이블3.Key; 내부 조인 (자연 조인) - 두 테이블에서 일치하는 레코드만을 출력함 (교집합) SELECT * FROM 기준테이블 AS 'a' -- 'a'라는 별칭 지정 INNER JOIN 대상테이블 AS 'b' -- 'b'라는 별칭 지정 ON a.Key = b.Key -- 주로 기본키, 외래키로 연결함 [WHERE 조건]; 외부 조인 # LEFT JOIN - FROM 절의 테이블에 있는 모든 데이터 + JOIN 절의 테이블에 있는 동일한 데이터 SELECT * F..

[SQL] 관계 차수 [내부링크]

관계 차수 # 1:1 관계 - 두 개의 테이블 간에 각각 하나의 레코드만 매칭되는 관계 - 주로 기본키와 외래키를 연결해서 관계 설정 - 두 테이블 중 하나의 테이블에서만 외래키를 가질 수 있음 - 1:1 관계를 보조적인 테이블로 활용할 수 있음 - 1:1 관계를 사용하는 상황 1) 테이블의 컬럼 중 일부가 NULL 값을 가지는 경우 2) 특정 컬럼 값이 자주 변경되지 않는 경우 → 1:1 관계를 사용하면 테이블의 정규화를 유지하면서도 데이터를 보다 효율적으로 관리 가능 # 정규화 (추후 따로 포스팅 예정) : 데이터베이스 설계에서, 가능한 중복을 제거하고 데이터를 구조화하는 프로세스 → 데이터의 일관성 & 유지보수성 & 검색 속도 개선 # 1:N 관계 (= N:1 관계) - 한 테이블의 레코드가 다른 ..

[SQL] 기본키(PK)와 외래키(FK) [내부링크]

키 (Key, 식별자) - 레코드를 검색/정렬할 때, 다른 레코드들과 구별할 수 있는 기준이 되는 속성 # 키의 특성 1) 유일성 : 식별자에 의해 모든 레코드들이 유일하게 구분됨 2) 최소성 : 꼭 필요로 하는 최소한의 속성만으로 식별자가 구성됨 키의 종류 # 기본키 (PK, Primary Key) - 테이블의 각 레코드들을 고유하게 식별하는 컬럼 (or 컬럼 집합) - NULL 값을 허용하지 않음 → 자동으로 NOT NULL로 설정됨 - 기본키에 대한 인덱스는 자동으로 추가됨 - CREATE 문에서 설정하기 : https://young0105.tistory.com/114 # 후보키 (Candidate Key) - 테이블에서 각 레코드들을 구별하는 데 기준이 될 수 있는 컬럼 - 유일성과 최소성을 만족..

[SQL] 인덱스 [내부링크]

인덱스 (Index, 색인) - DB에서 데이터 검색 속도를 향상시키기 위해 사용하는 구조 - PRIMARY KEY, UNIQUE 선언 시 자동으로 인덱스가 생성됨 # 장점 - 특정 컬럼에 대해 정렬된 값을 가짐 → 해당 컬럼의 값을 이용하여 검색을 수행할 때, 빠르게 검색 가능 - 대량의 데이터를 처리할 때 효율적임 (인덱스가 없다면 풀 스캔 : 하나하나 스캔하며 검색해서 시간이 오래 걸림) # 단점 - DB 내에 별도로 저장되어 있음 → 추가적인 디스크 공간을 필요로 함 - 인덱스를 생성할 때 데이터를 정렬하는 작업을 필요로 함 → 인덱스 생성/수정 시 시간이 소요될 수 있음 ⇒ 필요한 경우에만 적절하게 설계해서 사용할 것 테이블 생성 시점에 인덱스 추가 CREATE TABLE 테이블명 ( 컬럼명1 ..

[SQL] WHERE 조건절 & 연산자 [내부링크]

WHERE 조건절 SELECT * FROM 테이블명 WHERE 조건식; - SELECT, UPDATE, DELETE 구문의 대상이 되는 조건을 지정함 - 구성 1) 연산자 2) 피연산자 : 컬럼명, 상수값, 서브쿼리 등 - 논리 연산자를 이용해서 여러 조건식을 조합해서 사용할 수 있음 비교 연산자 A = B A와 B는 같다 A != B 또는 A B A와 B는 다르다 A < B A는 B보다 작다 A B A는 B보다 크다 A >= B A가 B보다 크거나, A와 B가 같다 논리 연산자 (조건식1) AND (조건식2) 조건식 둘 다 TRUE면 TRUE 반환 (조건식1) OR (조건식2) 조건식 하나 이상이 TRUE면 TRUE 반환 NOT (조건식) BOOLEAN 값이 조건식 결과와 반대로 반환 SQL 연산자 컬..

[SQL] DML - 데이터 삽입/변경/삭제 (INSERT, UPDATE, DELETE) [내부링크]

DML (데이터 조작어, Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE 데이터 삽입 : INSERT 문 - 포지셔널 : 컬럼명과 삽입할 값의 순서를 동일하게 할 것 - 컬럼명과 값은 일대일 대응해야 함 → 컬럼 수보다 값을 적게 설정하면 오류 # 기본 형식 INSERT INTO 테이블명(컬럼명1, 컬럼명2, ..., 컬럼명n) VALUES (값1, 값2, ..., 값n); -- VALUE도 무관 - 제약조건이 NOT NULL이 아니라면, 해당 컬럼을 제외하고 작성 가능 - 값 부분에 DEFAULT를 입력하면 해당 컬럼에 저장된 DEFAULT 값으로 입력됨 - DEFAULT가 설정되어 있는 컬럼은 선언 시 생략하면 자동으로 DEFAULT 값이 ..

[SQL] DDL - 테이블 변경/삭제 (ALTER, RENAME, DROP, TRUNCATE) [내부링크]

테이블 구조 변경 : ALTER 문 # 기본키 추가 ALTER TABLE 테이블명 ADD PRIMARY KEY(컬럼명); # 기존 컬럼에 대한 정의 변경 (제약조건 변경) ALTER TABLE 테이블명 MODIFY [COLUMN] 컬럼명 자료형 [제약조건1] [제약조건2] ...; # 기존 컬럼의 자료형 변경 ALTER TABLE 테이블명 MODIFY [COLUMN] 컬럼명 새_자료형; # 기존 컬럼의 이름 변경 ALTER TABLE 테이블명 RENAME COLUMN 기존_컬럼명 TO 새_컬럼명; # 새로운 컬럼 추가 -- 테이블의 마지막 컬럼으로 추가됨 ALTER TABLE 테이블명 ADD [COLUMN] 컬럼명 자료형 [제약조건]; # 기존 컬럼 삭제 ALTER TABLE 테이블명 DROP [COLU..

[SQL] DDL - 테이블 생성 (CREATE) [내부링크]

DDL (데이터 정의어, Data Definition Language) - 테이블 등 데이터 구조를 정의하는 데 사용하는 명령어 - CREATE, ALTER, DROP, RENAME 테이블 생성 HTML 삽입 미리보기할 수 없는 소스 # [NOT NULL] - 해당 컬럼에서 NULL 값을 허용하지 않음 # [DEFAULT 기본값] - 레코드 삽입 시 해당 컬럼의 값을 입력하지 않았을 때 적용되는 기본값을 지정함 - 컬럼의 자료형에 맞게 기본값을 입력할 것 ex) VARCHAR(n) → '미정' - 자동으로 현재 날짜/시간이 삽입되도록 하기 : 컬럼명 TIMESTAMP DEFAULT CURRENT_TIMESTAMP # [PRIMARY KEY (컬럼명)] - 해당 컬럼 (or 컬럼 조합)을 각 레코드를 식별..

[SQL] 기본 명령어 (DB 생성 및 삭제, 테이블 구조 조회 등) [내부링크]

# 데이터베이스 생성 - 생성된 DB는 MySQL 서버에 저장됨 - DB 내에서 테이블을 생성하고 데이터를 저장할 수 있음 - DB 이름이 중복될 경우 오류 발생 CREATE DATABASE DB명; # 데이터베이스 선택 - 해당 DB를 사용하겠다고 명시하는 것 USE DB명; -- 또는 스키마에서 해당 DB를 더블 클릭 # 데이터베이스 삭제 DROP DATABASE DB명; # 데이터베이스 목록 조회 SHOW DATABASES; # 테이블 목록 조회 SHOW TABLES; # 테이블 구조 조회 (컬럼별 제약조건 확인) DESC 테이블명; - Field : 컬럼명 - Type : 자료형 - Null 1) YES (NULL 가능) 2) NO (NULL 불가능 == NOT NULL) - Key 1) PRI ..

[SQL] MySQL 초기 설정 (안전 모드 해제, 코드 힌트 대문자로 설정) [내부링크]

안전 모드 해제 - 미설정 시, DELETE나 UPDATE 등의 구문이 미작동할 수 있음 - 체크 해제하기 코드 힌트 대문자로 설정 - 미설정 시, 예약어의 코드 힌트가 소문자로 뜸 (SQL 예약어는 대문자로 작성하는 것이 권장됨) - 체크하기

[SQL] MySQL 단축키 [내부링크]

- 해당 코드 실행 - [Ctrl] + [Enter] - 전체 코드 실행 - [Ctrl] + [Shift] + [Enter] - 코드 삭제 - [Ctrl] + [L] - 코드 복사 - [Ctrl] + [D] - 코드 힌트 - [Ctrl] + [Space] - 주석 처리 - [Ctrl] + [/] - 코드 자동 정렬 - [Ctrl] + [B]

[SQL] 자료형 (Data type) [내부링크]

숫자형 # 정수 - INT - BIGINT # 실수 - FLOAT(n) : 길이가 n인 부동 소수점 실수 - DOUBLE - DECIMAL(a, b) : 전체 자릿수가 a이고, 그 중 소수점 자릿수가 b인 실수 → 정수 자릿수가 (a-b)보다 큰 데이터를 삽입하면 오류 발생 문자형 # 길이 제한 O - VARCHAR(n) : 0 ~ n 크기의 가변 길이 문자열 → n보다 짧은 길이로 입력하면, 그만큼의 메모리 공간만 차지함 - CHAR(n) : n 크기의 고정 길이 문자열 → n보다 짧은 길이로 입력할 경우, 공백으로 채워짐 → 항상 n만큼의 메모리 공간을 차지함 # 길이 제한 X - TEXT - BLOB 날짜/시간형 · 날짜와 관련된 연산 수행 가능 # 날짜만 - DATE · 다양한 형식 가능 (연도는..

[SQL] 개요 [내부링크]

데이터베이스 관리 시스템 (DBMS) - 데이터베이스를 관리/운영하는 소프트웨어 - 하나의 DBMS에는 여러 개의 DB가 존재할 수 있음 ex) MySQL, Oracle, MariaDB, ... # 데이터베이스 (DB) - 대용량의 데이터 집합을 체계적으로 구성한 것 - 하나의 DB에는 여러 개의 테이블이 존재할 수 있음 DBMS의 특징 1) 데이터 무결성 - 동일한 내용에 대해 서로 다른 데이터가 저장되는 것을 허용하지 않는 성질 - 데이터의 오류 X 2) 데이터 독립성 - DB 크기나 데이터 파일의 저장소를 변경하더라도 기존에 작성된 응용프로그램에는 영향 X → 의존적 관계가 아닌 독립적 관계 3) 보안 - DB 내 데이터에는 접근이 허가된 사람만 접근할 수 있어야 함 - 접근할 때에도 사용자의 계정..

[Java Code] 소켓 양방향 통신 구현 [내부링크]

- 서버와 클라이언트는 서로 키보드로 입력한 메세지를 주고 받을 수 있음 서버 측 코드 public class ServerTest { // 클라이언트를 연결받는 소켓 ServerSocket serverSocket; // 실제 통신을 담당할 소켓 Socket socket; // 키보드 담당 입력 스트림 BufferedReader keyboardReader; // 소켓 담당 입력 스트림 BufferedReader socketReader; // 소켓 담당 출력 스트림 BufferedWriter socketWriter; public ServerTest() { initData(); } private void initData() { try { System.out.println("서버 실행"); // 서버 소켓 생성..

[Java] 소켓 통신 [내부링크]

소켓 통신 - 양 끝단에 포트 번호를 달아서, 통신을 통해 데이터를 주고 받는 것 - 커넥션 풀 (connection pool) : 소켓은 한 번 연결되면 지속적으로 연결되어 있음 → 인증 정보가 필요하지 않음 - 서버 측과 클라이언트 측은 코드로 연결된 것이 아니라, 통신을 통해 연결되는 것 - 양방향 통신 예제 : https://young0105.tistory.com/107 # 서버 - 서비스를 제공하는 자 - 소켓 2개를 필요로 함 1) ServerSocket : 클라이언트의 연결만 받는 소켓 (데이터 주고 받기 X) 2) Socket : 실제로 통신하며 데이터를 주고 받는 소켓 # 클라이언트 - 서비스를 요청하는 자 - 소켓 1개를 필요로 함 1) Socket : 실제로 통신하며 데이터를 주고 받..

[Java] 입출력 스트림 (I/O Stream) [내부링크]

I/O Stream (입출력 스트림) - I/O : 데이터를 읽고 쓰는 작업 - 스트림 : 네트워크에서의 자료 흐름이 물의 흐름과 같다는 비유에서 유래 - 다양한 입출력 장치에 독립적으로 일관성 있는 입출력을 제공함 - 입출력 장치 ex) 파일 디스크, 키보드, 마우스, 네트워크, 메모리 등 - 한 방향으로만 움직임 입출력 스트림의 구분 # 대상 기준 1) 입력 스트림 (InputStream, Reader, ...) 2) 출력 스트림 (OutputStream, Writer, ...) # 자료의 종류 기준 1) 바이트 단위 스트림 (InputStream, OutputStream, ...) 2) 문자 단위 스트림 (Reader, Writer, ...) # 기능 기준 1) 기반 스트림 2) 보조 스트림 (Bu..

[Java Code] 입출력 스트림 - 예제 모음 [내부링크]

엔터 키를 누를 때까지 반복해서 값을 입력받기 // 엔터 키를 누를 때까지 반복해서 값을 입력받기 (엔터 키 = '\n') int i; while ( (i = System.in.read()) != '\n' ) { System.out.print((char) i); } 특정 파일의 모든 글자 읽어오기 // 특정 txt 파일의 모든 글자 읽기 (엔터 키, 공백도 포함) FileInputStream fis변수명 = null; try { // 여기 입력하는 파일은 이미 존재하는 파일 fis변수명 = new FileInputStream("경로/파일명.txt"); // 한글이 포함되었을 경우, 문자 스트림 FileReader 활용 int i; // i는 데이터를 1byte씩 가져올 임의의 변수명 while ( (i ..

[개발 일지] Strikers 1945 게임 구현 프로젝트 5일차 (02/27) ~ 종료 [내부링크]

5일차에 구현한 것 앞선 일차들에서 밑작업은 모두 끝내 두었다. 그래서 5일차에 Timer와 TimerTask를 이용해서 지연시간 후에 적군 소환 메서드가 호출되게끔 하면 게임을 완성할 수 있었다. 1. 적군 소환 흐름 구현 // 적군 소환 흐름 public void createEnemy() { // 1번째 적군 소환 unit2ArrayLeftMove(); Timer timer1 = new Timer(); long delay1 = 3000L; // 2번째 적군 소환 TimerTask task1 = new TimerTask() { @Override public void run() { unit3OneMove(); } }; timer1.schedule(task1, delay1); // 3번째 적군 소환 lon..

[개발 일지] Strikers 1945 게임 구현 프로젝트 4일차 (02/26) [내부링크]

4일차의 목표 - 생성된 적군들을 메인 프레임의 리스트에 추가하는 방식으로 관리 - 다른 클래스들도 그에 호환되도록 코드 전부 수정 4일차에 구현한 것 1. 메인 프레임의 멤버 변수 추가 ArrayList enemyList = new ArrayList(); // 아이템도 적군이 생성될 때마다 생성되므로 똑같이 리스트로 정의해둠 ArrayList itemList = new ArrayList(); 2. Enemy 객체들이 각각 자신이 enemyList에 생성된 순서 인덱스를 멤버 변수로 갖도록 함 // 부모 클래스의 멤버 변수 protected static int enemyCount; // 생성된 적군의 총 숫자 protected int myIndex // 자신이 생성된 순서 // 자식 클래스의 생성자 pu..

[개발 일지] Strikers 1945 게임 구현 프로젝트 3일차 (02/25) [내부링크]

3일차에 구현한 것 1. 유닛 종류별로 이동 가능한 범위 조정 2. 유닛 종류별로 총알을 맞는 범위 조정 3. 유닛 종류별로 총알을 쏘는 위치 조정 4. 유닛 종류별로 적군과 플레이어가 접촉했다고 판단하는 범위 조정 (접촉하면 대미지를 입음) 5. 타이머를 시간 기록 대신 제한 시간 형식으로 (00:00이 되면 게임오버 되게끔 할 것) 별거는 아닌데 하나하나 보느라 시간이 오래 걸렸다. 다음은 게임 오버 화면이랑 게임 클리어 문구를 간단하게라도 만들어야 할 것 같다. 그리고 이제 만든 유닛들을 메인 프레임에 합치고 호환 가능하게 다른 파일들도 수정해야 한다.

[개발 일지] Strikers 1945 게임 구현 프로젝트 2일차 (02/24) [내부링크]

2일차에 구현한 것 1. Enemy 클래스를 상속받는 EnemyUnit1 ~ 4 클래스 생성 (내가 맡은 건 3 ~ 4번) 2. 적군을 소환하는 패턴 각각을 메서드로 구현 중 3. Timer 클래스를 이용해 지연시간 후에 메서드를 호출하는 방법과, 일정 주기로 메서드를 반복해서 호출하는 방법을 익힘 - 나중에 이걸 활용해서 프레임 생성자에 적군 소환 흐름을 만들 예정

[개발 일지] Strikers 1945 게임 구현 프로젝트 1일차 (02/23) [내부링크]

1일차에 구현한 것 1. enemy[] 배열을 만들어서 여러 객체를 한 번에 소환하기 - 성공했으나, 일단 EnemyUnit 각 클래스들을 만들기 전까지는 1개만 소환해서 테스트 - 컬렉션 프레임워크에서 List는 배열과 다르게 크기를 지정하지 않아도 되니까 배열 말고 List를 사용하는 게 나을 수도? 2. Timer 클래스를 활용해서 오른쪽 위에 게임 진행 시간을 보이게 함 - 로딩 화면에서는 시간이 흐르지 않고, 게임 진행 중에만 시간이 흐름 (메인 프레임 클래스의 static 변수인 'gameState'의 값에 따라) - 나중에 게임 종료 화면을 만들면 시간 기록을 보이게 할 예정 - 타이머 디자인 바꾸기 3. up(), down() 메서드 사용 - 기본적으로 down()하면서 양옆으로 움직이며,..

[개발 일지] Strikers 1945 게임 구현 프로젝트 0일차 (02/22) [내부링크]

팀 프로젝트 주제 Swing을 이용하여 Strikers 1945 게임 구현하기 프로젝트 기간 2023/02/23 ~ 2023/02/27 첫 팀 프로젝트를 진행하게 되었다. 주제는 Java Swing을 이용해 GUI 게임을 구현하는 것이다. 우리 팀은 Strikers 1945라는 비행기 게임을 만들게 되었다. 원래 프로젝트 기간은 23일부터인데, 주제를 일찍 정해서 남는 시간동안 클래스 틀을 조금 만들어보기로 했다. 우선 주요 클래스는 AirlineFrame (메인프레임), Player, Enemy, Item, Bullet 정도. 나는 적군(Enemy) 클래스를 중점적으로 맡아서 설계하기로 했다. 적군 비행기의 종류에 따라 스텟을 다르게 설정하기, 적군을 한 번에 여러 개씩 생성하기 등등 고려할 것이 많았..

[Java Code] Map - 전화번호부 프로그램 구현 [내부링크]

코드 # 기능 정의 파일 public class PhoneBook { // 이름 전화번호 HashMap phoneBook = new HashMap(); static Scanner scanner = new Scanner(System.in); public void sampleData() { phoneBook.put("김철수", "010-1234-1234"); phoneBook.put("이영수", "010-5678-5678"); phoneBook.put("박민수", "010-9876-9876"); } // 저장 기능 public void save() { String phoneName = null; // 입력받을 이름 String phoneNumber = null; // 입력받을 전화번호 System.out.p..

[Java] 컬렉션 프레임워크 (List, Set, Map) [내부링크]

컬렉션 프레임워크 (Collection Framework) - 프로그램 구현에 필요한 자료 구조를 구현해 놓은 JDK 라이브러리 - 개발에 소요된 시간을 절약하면서 최적화된 알고리즘을 사용할 수 있음 List 계열 인터페이스 - 객체를 순서에 따라 저장함 (인덱스로 접근 가능) - 중복 값 가능 ArrayList 클래스 // 타입 미설정 시 (Object로 선언) ArrayList 리스트명 = new ArrayList(); // 타입 설정 시 (제네릭 사용) ArrayList 리스트명 = new ArrayList(); // ex) 정수 자료형이 들어가는 ArrayList // ArrayList list = new ArrayList(); // 선언과 동시에 값 추가 ArrayList 리스트명 = new A..

[Java] 자료 구조 [내부링크]

자료 구조 (Data Structure) - 프로그램에서 사용할 많은 데이터를 메모리 상에서 관리하는 여러 구현 방법 - 성능 좋은 알고리즘의 기반 : 효율적인 자료 구조 - 자료의 효율적인 관리는 프로그램의 수행 속도와 밀접한 관련이 있음 - 프로그램에 맞는 최적의 자료 구조를 활용해야 함 → 여러 자료 구조에 대한 이해 중요 선형 자료 구조 - 한 줄로 자료를 관리하는 자료 구조 # 배열 (Array) - 정해진 크기의 메모리를 먼저 할당받아 사용해야 함 : 값자료형[] 배열명 = new 값자료형[크기]; - 자료의 물리적 위치와 논리적 위치가 같음 # 연결 리스트 (LinkedList) - 자료가 추가될 때마다 메모리를 할당받음 - 자료는 링크로 연결됨 - 배열과의 차이점 : 자료의 물리적 위치와 ..

[Java Code] 로또 게임 구현 [내부링크]

- 1 ~ 45 범위의 랜덤한 정수 6개 코드 # 랜덤 정수 추출 기능 파일 public class LottoRandomNumber { public int[] lottoNumber() { // 메서드에서 리턴할 것이므로 멤버변수로 선언하지 않아도 됨 int[] lotto = new int[6]; // 한 곳에서만 사용된다면 지역변수로 선언 Random r = new Random(); for (int i = 0; i < lotto.length; i++) { // 1 ~ 45 범위의 정수 난수를 생성해서 배열에 넣기 lotto[i] = r.nextInt(45) + 1; // 중복 제거 for (int j = 0; j < i; j++) { if (lotto[i] == lotto[j]) { i--; // 이번 ..

[Java] 로또 게임 구현 중 NullPointerException 발생 [내부링크]

에러 발생 코드 public class LottoFrameError extends JFrame implements ActionListener { JButton button; int[] lotto; // 중략 // @Override public void actionPerformed(ActionEvent e) { System.out.println("게임 시작 ~"); LottoRandomNumberBefore lottoRandomNumber = new LottoRandomNumberBefore(); // 객체 생성 lottoRandomNumber.lottoNumber(); // 번호 생성 lotto = lottoRandomNumber.getLotto(); // 로또 번호 멤버 변수 가져오기 // 콘솔에 번호..

[Java] Thread - 은행 계좌 입출금에 대한 동기화 기능 구현 [내부링크]

코드 # 클래스 파일 public class BankAccount { int money = 100_000; public int getMoney() { return money; } public void setMoney(int money) { this.money = money; } // 입금 // synchronized 메서드 public synchronized void saveMoney(int money) { int currentMoney = getMoney(); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } setMoney(currentMoney + money); System.out.println("입..

[Java] 쓰레드 (Thread) [내부링크]

쓰레드 (Thread) - 하나의 프로세스 안에서 실제 작업을 수행하는 작업 단위 (작업자) - 각각 자신만의 작업 공간을 가짐 (Context 영역) - 코드를 실행할 때 사용하는 main 함수는 '메인 쓰레드'임 - 쓰레드별로 작업 시간이 다를 수 있음 # 프로세스 (Process) - 프로그램이 실행되면 운영체제로부터 메모리를 할당받아, '프로세스 상태'가 됨 - 주기억장치에 올라간 상태 - 하나의 프로세스는 여러 개의 쓰레드를 가질 수 있음 Thread의 상태 변화 - 작업을 잠깐 쉬면 'Not Runnable' 상태가 됨 - 작업이 완전히 종료되면 'Dead' 상태가 됨 Thread의 기본 명령어 # 쓰레드에게 작업을 시작하도록 명령 - 쓰레드명.start(); - 작업을 시작하면 쓰레드는 ru..

[Java Code] 윤년 계산기 구현 [내부링크]

- 4의 배수인 해는 윤년임 - 4의 배수이면서 100의 배수인 해는 윤년이 아님 → 4의 배수이면서 100의 배수가 아니어야 윤년임 - 100의 배수이면서 400의 배수인 해는 윤년임 코드 # 윤년 계산 기능 파일 public class LeapYear { // 메서드 public boolean isLeapYear(int year) { // 아래 if 문의 조건에 걸리지 않는다면 false로 유지됨 boolean result = false; if (year % 4 == 0) { if (year % 100 != 0) { result = true; // year % 4 == 0이고 year % 100 == 0인 값은 else로 빠짐 } else { if (year % 400 == 0) { result = ..

[Java Code] KeyListener - 이미지 움직이기 [내부링크]

- 키보드 방향키로 움직이되, 이미지가 창 밖으로 나가지 않도록 함 코드 // 인터페이스 파일 // public interface Moveable { void left(); void right(); void up(); void down(); } ------------------------------------ // 클래스 파일 // public class MoveLabelFrame3 extends JFrame implements Moveable { private JLabel label; private int labelX; private int labelY; private final int SIZE_X = 800; private final int SIZE_Y = 800; public MoveLabelFra..

[Java Code] MouseListener - 컴포넌트 이동시키기 [내부링크]

- 마우스를 클릭하면 해당 위치로 컴포넌트가 이동하도록 함 코드 public class MouseEventListener1 extends JFrame{ private JLabel labelText; private int labelTextX; private int labelTextY; public MouseEventListener1() { initData(); setInitLayout(); addEventListener(); } private void initData() { setTitle("클릭으로 문자열 이동시키기"); setSize(500, 500); setDefaultCloseOperation(3); // 초깃값 세팅 labelTextX = 200; labelTextY = 200; labelText..

[Java Code] ActionListener - 배경 색 변경하기 [내부링크]

- 버튼을 누르면 패널의 배경이 지정된 색으로 변경되도록 함 - 배열을 사용해서 코드 간소화 코드 public class ChangeRainbow extends JFrame implements ActionListener { // 버튼을 배치할 패널 private JPanel panel1; // 배경 색을 변경할 패널 private JPanel panel2; // 버튼 배열 private JButton[] buttons = new JButton[5]; // 배경 색 배열 private Color[] colors = {Color.red, Color.orange, Color.yellow, Color.green, Color.blue}; public ChangeRainbow() { initData(); setIn..

[Java] 제네릭 (Generic) [내부링크]

제네릭 프로그래밍 - 다양한 자료형이 적용될 수 있는 클래스를 만드는 것 - 선언 시 클래스의 자료형을 명시하지 않음 → 추후 해당 클래스를 인스턴스화(new)할 때 자료형이 정해짐 (.class 파일도 이 시점에 생성됨) ⇒ 변수의 이름과 기능이 동일하면서, 자료형만 달라지는 변수들을 사용할 때 고려 - 컬렉션 프레임워크에서 많이 사용됨 : 알고리즘을 활용해서 보다 빠르게 자료 구조를 검색하고, 데이터를 삽입할 수 있는 프레임워크 # 장점 - 인스턴스화할 때, 다이아몬드 연산자(< >) 사이에 자료형을 명시함 → 가독성을 높임 - 자료형을 잘못 사용했을 때, 컴파일 시점 오류가 발생함 → 자료형의 변환이 컴파일러에 의해 검증되므로, 안정성이 높음 - java 파일의 수를 줄일 수 있음 ex) doubl..

[Java Swing] 메서드 및 함수 모음 [내부링크]

# 컴포넌트를 화면에 추가하기 // root 패널에 추가할 때 add(컴포넌트명); // 생성한 패널에 추가할 때 패널명.add(컴포넌트명); # 컴포넌트 폰트 색 변경 컴포넌트명.setForeground(Color객체); # 컴포넌트의 텍스트를 가져오기 or 설정하기 // 텍스트 가져오기 컴포넌트명.getText(); // 텍스트 설정하기 컴포넌트명.setText("문자열"); // 기존 텍스트에 추가하기 컴포넌트명.append("텍스트"); # 배경 색 지정하기 // 창 전체 배경 색 지정 getContentPane().setBackground(Color.색상); // 컴포넌트/패널의 배경 색 지정 컴포넌트명.setBackground(Color.색상); # 원하는 색 추출 Color 컬러명 = new..

[Java Swing] 이벤트 리스너 (Event Listener) [내부링크]

이벤트 리스너 (Event Listener, 이벤트 핸들러) - 이벤트의 발생을 감지하고, 이벤트에 대한 처리를 담당하는 객체 - 실행의 흐름을 만들 수 있음 - implements 키워드로 인터페이스를 받지 않고, 구현 클래스를 이용할 수도 있음 · 구현 클래스 관련 설명 : https://young0105.tistory.com/82 ActionListener 인터페이스 - 버튼을 눌렀을 때 이벤트가 발생함 - 해당 클래스는 'ActionListener' 인터페이스가 적용됨 → 다형성 : 자기 자신의 자료형으로 사용할 수도 있고, ActionListener 타입으로 사용할 수도 있음 - 인터페이스를 불러오면 'actionPerformed' 메서드가 자동으로 호출됨 → 해당 메서드를 재정의해서, 이벤트 ..

[Java] 내부 클래스와 익명 클래스 [내부링크]

내부 클래스 (Inner class, 중첩 클래스) - 클래스 내부에서 선언한 다른 클래스 → 해당 클래스를 감싸고 있는 '외부 클래스'와 밀접한 연관이 있는 경우가 많음 - 다른 외부 클래스에서 사용할 일이 없는 경우에는 내부 클래스로 선언하는 것을 고려할 수 있음 → 장점 : 내부 클래스에서 외부 클래스의 멤버 변수에 접근하기 쉬움 (코드의 복잡성을 줄임) // 외부 클래스의 인스턴스화 외부클래스 참조변수 = new 외부클래스(); // 내부 클래스의 인스턴스화 (내부 클래스에 private 선언 시 사용 불가) 외부클래스.내부클래스 참조변수 = 외부클래스.new 내부클래스(); # 인스턴스 내부 클래스 - 내부적으로 사용한 클래스 (private 권장) - 정적 내부 클래스와의 차이점 : 외부 클래..

[Java Swing] JLabel 클래스 : 이미지 관련 [내부링크]

이미지 삽입 및 중첩 // 이미지1 위에 이미지2를 중첩시키기 private JLabel 이미지1; private JLabel 이미지2; // 생성자 public 클래스명() { initData(); setInitLayout(); } // 생성자에 사용할 메서드 private void initData() // 창 제목, 크기 등 설정 ... // 이미지1 가져오기 이미지1 = new JLabel(new ImageIcon("경로/파일명1.확장자")); 이미지1.setSize(너비, 높이); // 이미지2 가져오기 이미지2 = new JLabel(new ImageIcon("경로/파일명2.확장자")); 이미지2.setSize(너비, 높이); } // 생성자에 사용할 메서드 private void setInit..

[Java] 오류와 예외 처리 [내부링크]

프로그램에서의 오류 ① 컴파일 오류 (Compile error) - 프로그램 코드 작성 중 발생하는 문법적 오류 ② 실행 오류 (Runtime error) - 실행 중인 프로그램이 의도하지 않은 bug를 만나거나, 프로그램이 중지되는 오류 - 비정상 종료를 일으켜 시스템의 심각한 장애를 유발할 수 있음 오류와 예외 ① 시스템 오류 (Error) - 프로그래머가 처리할 수 없는 오류 - 가상 머신에서 발생함 ex) 동적 메모리가 없는 경우, 스택 메모리 오버 플로우 등 ② 예외 (Exception) - 프로그램에서 제어할 수 있는 오류 - 언어의 안전성을 위해, 문법적으로 '예외 처리'가 필요함 ex) 읽으려는 파일이 존재하지 않는 경우, 네트워크/DB 연결이 되지 않는 경우 등 예외 클래스 - 자바에서는..

[Java Code] 이미지 삽입하기 [내부링크]

코드 public class MyImageFrame extends JFrame { ImagePanel imagePanel; // 내부 클래스를 멤버 변수로 선언 public MyImageFrame() { initData(); setInitLayout(); } private void initData() { setTitle("이미지 연습"); setSize(400, 400); setDefaultCloseOperation(3); imagePanel = new ImagePanel(); } private void setInitLayout() { add(imagePanel); setVisible(true); } // 내부 클래스 이용해보기 class ImagePanel extends JPanel { private ..

[Java Swing] paint 메서드 : 도형, 이미지, 문자열 그리기 [내부링크]

JPanel 클래스의 paint 메서드 - JPanel 클래스를 상속받아, paint 메서드를 재정의해서 그림을 그릴 수 있음 # 도형 그리기 // JFrame을 상속받은 클래스의 외부 or 내부에 선언해서 사용 class 클래스명 extends JPanel { // paint 메서드를 재정의해서 사용함 @Override public void paint(Graphics g) { super.paint(g); // fillRect : 채운 사각형 // 사각형 그리기 g.drawRect(x좌표, y좌표, 너비, 높이); // 둥근 사각형 그리기 g.drawRoundRect(매개변수); // 문자열 넣기 g.drawString("문자열", x좌표, y좌표); // 선 그리기 g.drawLine(x좌표1, y좌표..

[Java Swing] 패널 (Panel) [내부링크]

패널 (Panel) - 컴포넌트들을 그룹화시켜, 각 그룹에 대한 레이아웃을 지정할 수 있게 함 - root 패널의 기본 레이아웃 : BorderLayout → 생성한 패널을 추가할 때는 BorderLayout 방식으로 add해야 함 - 생성한 패널의 기본 레이아웃 : FlowLayout → 생성한 패널에 컴포넌트를 추가할 때는 FlowLayout 방식으로 add해야 함 // 선언 접근제어자 JPanel 패널명; ----------- // 인스턴스화 패널명 = new JPanel(); // 패널 배경 색 지정 패널명.setBackground(Color.색상); ----------- // 패널 추가 (기본 레이아웃일 때 : BorderLayout) add(패널명, BorderLayout.방향); // 패널에..

[Java Code] 패널 - 영역 분리하기 [내부링크]

코드 public class MyFramePanel extends JFrame { JButton[] buttons = new JButton[6]; private JPanel panel1; private JPanel panel2; public MyFramePanel2() { initData(); setInitLayout(); } private void initData() { setTitle("패널 연습"); setSize(600, 400); setDefaultCloseOperation(3); panel1 = new JPanel(); panel1.setBackground(Color.red); panel2 = new JPanel(); panel2.setBackground(Color.yellow); for (i..

[Java Swing] 컴포넌트 (Component) [내부링크]

# 버튼 // 선언 접근제어자 JButton 버튼명; // 인스턴스화 버튼명 = new JButton("텍스트"); // ImageIcon 객체를 매개변수에 넣으면 이미지도 가능 // 버튼의 테두리 제거 버튼명.setBorder(null); // 해당 버튼 활성화 버튼명.doClick(); # 텍스트 삽입 or 이미지 삽입 // 선언 접근제어자 JLabel 컴포넌트명; // 인스턴스화 (텍스트) 컴포넌트명 = new JLabel("텍스트"); // 인스턴스화 (이미지) 컴포넌트명 = new JLabel(new ImageIcon("경로/파일명.확장자")); # 텍스트 입력 영역 // 선언 접근제어자 JTextArea 컴포넌트명; // 인스턴스화 컴포넌트명 = new JTextArea("텍스트"); # 텍스..

[Java Swing] 배치 관리자 (Layout) [내부링크]

배치 관리자 (Layout) - 컴포넌트(Component)들의 크기와 위치를 관리하는 객체 FlowLayout FlowLayout(FlowLayout.방향, 좌우간격, 상하간격); // 방향 기본값 : CENTER // 컴포넌트에 대한 필수 설정은 없음 - 컴포넌트들을 수평, 수직 방향으로 배치하는 것 ( 왼쪽→오른쪽, 위쪽→아래쪽 ) - 창의 크기가 변경되면 자동으로 컴포넌트들이 크기에 맞게 재배치됨 → 기본적으로 한 줄로 배치되며, 더 이상 공간이 없으면 그 다음 줄에 배치됨 - 예제 : https://young0105.tistory.com/71 BorderLayout (기본값) BorderLayout(좌우간격, 상하간격); -------------- // add 메서드를 사용할 때, 매개변수(방향..

[Java Code] 배치 관리자 3 - NoLayout 구현 [내부링크]

코드 public class NoLayoutEx extends JFrame { JButton[] buttons = new JButton[5]; public NoLayoutEx2() { initData(); setInitLayout(); } private void initData() { setTitle("좌표 기반 배치"); setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 버튼 인스턴스화 for (int i = 0; i < buttons.length; i++) { buttons[i] = new JButton("버튼 " + (i + 1)); } buttons[0].setSize(70, 440); buttons[1].setSize(3..

[Java Code] 배치 관리자 2 - BorderLayout 구현 [내부링크]

코드 public class BorderLayoutEx extends JFrame{ JButton[] buttons = new JButton[5]; // 배열 선언과 동시에 초기화 String[] directions = {BorderLayout.EAST, BorderLayout.WEST, BorderLayout.NORTH, BorderLayout.SOUTH, BorderLayout.CENTER}; public BorderLayoutEx2() { initData(); setInitLayout(); } private void initData() { setTitle("borderLayout 연습"); setSize(600, 600); setDefaultCloseOperation(JFrame.EXIT_ON_CL..

[Java Code] 배치 관리자 1 - FlowLayout 구현 [내부링크]

코드 public class FlowLayoutEx extends JFrame { private final int BUTTON_COUNT = 6; // 버튼 개수 private JButton[] buttons = new JButton[BUTTON_COUNT]; private FlowLayout flowLayout; public FlowLayoutEx3() { initData(); setInitLayout(); } private void initData() { setTitle("FlowLayout 구현"); setSize(500, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 버튼 인스턴스화 for (int i = 0; i < BUTTON_COUNT;..

[Java Swing] 기본 구조 [내부링크]

기본 구조 // 항상 JFrame 클래스로부터 상속받아야 함 public class 클래스명 extends JFrame { // 멤버변수 선언 // private 자료형 컴포넌트명; // ex) private JButton button1; private 자료형 배치관리자명; // ex) private FlowLayout flowLayout; // 생성자 // public 클래스명() { initData(); setInitLayout(); } // 생성자에 사용할 메서드 // public void initData() { // 창 제목 setTitle("제목"); // 창 크기 setSize(가로크기, 세로크기); // 창을 끄면 프로그램도 같이 종료되도록 함 setDefaultCloseOperation(J..

[Java Code] paint 메서드를 활용한 집 그리기 [내부링크]

코드 import java.awt.Graphics; import javax.swing.JFrame; import javax.swing.JPanel; public class MyFrame2 extends JFrame { // 내부 클래스를 활용해서 // JPanel 를 상속받고 paint 메서드로 집 그리기 MyDrawPanel drawPanel; class MyDrawPanel extends JPanel { @Override public void paint(Graphics g) { super.paint(g); g.drawRect(140, 260, 200, 140); // 지붕 g.drawLine(240, 160, 100, 260); g.drawLine(100, 260, 380, 260); g.drawLi..

[Java Swing] javax.swing 패키지를 사용할 수 없는 문제 해결하기 [내부링크]

1. 상단 메뉴에서 [Window] - [Preferences] 2. [Type Filters] 3. 우측 메뉴에서 [프로젝트] - [src] - module-info.java 파일 열기 4. 파일에 코드 입력하고 저장하기

[Java] Object 클래스 [내부링크]

java.lang 패키지 - import 예약어를 사용해서 가져오지 않아도 자동으로 import되는 패키지 ex) String, System, Object, Exception, ... Object 클래스 - 모든 클래스의 최상위 클래스 → 모든 클래스는 Object 클래스에서 상속받음 (extends 키워드 생략) → Object 클래스의 메서드 중 일부를 재정의해서 사용할 수 있음 # toString() 메서드 - (기본) 객체의 정보를 String 타입으로 바꿔 사용할 때 쓰임 # equals() 메서드 - (기본) 두 객체의 주소 값이 동일하면 true를 반환함 - (재정의) 주소 값이 다르더라도 두 객체가 논리적으로 동일하면 true를 반환함 ex) String 객체에 equals() 메서드를 사..

[Java Code] 인터페이스 - DAO 구현 [내부링크]

코드 // DTO : Data Transfer Object public class UserInfo { public static int SERIAL_NUMBER = 0; private int id; private String userName; private String pw; public UserInfo(String name, String pw) { SERIAL_NUMBER++; this.id = SERIAL_NUMBER; this.userName = name; this.pw = pw; } public int getId() { return id; } public String getUserName() { return userName; } public String getPw() { return pw; } pu..

[Java] 인터페이스와 default 메서드 [내부링크]

인터페이스 (Interface) - 구현된 것이 아무 것도 없는, 밑그림만 있는 기본 설계도 - 기능 중심 설계 : 클래스/프로그램이 제공하는 기능을 명시적으로 선언함 - 표준 : 기능을 정의해두면, 어떤 클래스든 가져와서 사용할 수 있음 - 클라이언트 코드와의 약속 (강제성이 있는 규칙) - 클래스/프로그램이 제공하는 명세 - 추상 클래스보다 추상화 정도가 더 높음 → 더 유연하게 코드 설계 가능 - 다형성 : 하나의 객체를 그 객체의 클래스 타입으로 볼 수도 있고, 구현된 인터페이스 타입으로 볼 수도 있음 # 인터페이스 정의 - 인터페이스는 멤버 변수를 가질 수 없고, 상수만을 가질 수 있음 - 인터페이스는 일반 메서드를 가질 수 없고, 추상 메서드만을 가질 수 있음 → 'abstract' 키워드를 ..

[Java] String 클래스의 메서드 [내부링크]

# 관련 포스팅 - 문자열 자료형 : https://young0105.tistory.com/44 # 문자열1.equals(문자열2) - 문자열1과 문자열2의 내용이 같으면 true 반환 - "문자열".equals(변수) ← null 에러 방지 # 문자열1.equalsIgnoreCase(문자열2) - 문자열의 대소문자를 구분하지 않고, 문자열1과 문자열2의 내용이 같으면 true 반환 # 문자열.indexOf("문자") - 문자열에서 해당 문자가 첫 번째로 등장하는 위치의 인덱스 반환 ex) 문자열 = "abc" → 문자열.indexOf("b") == 1 # 문자열.lastIndexOf("문자") - 문자열에서 해당 문자가 마지막으로 등장하는 위치의 인덱스 반환 # 문자열.charAt(인덱스) - 문자열에..

[CSS] 플렉스 박스 레이아웃 [내부링크]

Flexbox (플렉스 박스) - 웹 페이지의 레이아웃을 조정/배치하는 데 사용되는 CSS 속성 - 요소를 수평/수직으로 정렬하고 공간을 분배함 # 자식 요소의 배치/정렬은 항상 부모 요소를 기준으로 생각해야 함 구성요소 1) 플렉스 컨테이너 (Flex container) - Flexbox를 사용하여 요소를 배치하는 부모 요소 - height를 지정해주지 않으면, 컨테이너 내 자식 요소의 높이만큼으로 자동 지정됨 - 플렉스 컨테이너는 바로 아래 자식 요소까지만 영향을 미침 2) 플렉스 아이템 (Flex items) - 플렉스 컨테이너 내에서 배치되는 자식 요소 3) 주축 (Main axis) & 교차축 (Cross axis) - 플렉스 컨테이너 내에서 요소가 배치되는 축 플렉스 항목 배치 부모요소 { d..

[CSS] 미디어 쿼리 [내부링크]

미디어 쿼리 (Media Query) - 웹 페이지를 출력하는 디바이스의 종류/크기에 따라 CSS 스타일을 변경할 수 있는 기능 - 디바이스의 특성에 맞게 화면을 보여주기 위해 사용함 - 브라우저 크기에 맞게 자동으로 스타일을 조정함 → 사용자 경험 개선에 큰 도움 @media [only | not] 미디어유형 [and 조건1] [and 조건2] ... { 스타일속성 : 속성값 ; } - and : 조건을 계속 추가할 수 있음 - 콤마(,) : 동일한 스타일을 사용할 미디어 유형/조건이 있다면 콤마로 추가할 수 있음 - only : 미디어 쿼리를 지원하는 웹 브라우저에서만 조건을 인식하게 함 - not 미디어 유형 : 해당 미디어를 제외하고 적용함 ex) @media screen and (min-widt..

[CSS] 가변 그리드 레이아웃 [내부링크]

가변 그리드 레이아웃 - 화면 크기에 따라 요소의 크기가 자동으로 변하도록 함 · 전체를 감싸는 요소의 너비를 %로 변환 · 전체를 감싸는 요소의 너비를 기준으로 각 요소의 너비 계산 → width : ( 요소의 너비 / 전체 요소 너비 ) * 100 가변 이미지 # 부모 요소만큼만 크기가 변하도록 하기 선택자 { max-width : 100% } # 너비에 따라 다른 이미지 출력하기 - 최소 너비 미만이 되면 다른 이미지로 전환됨 ... 가변 비디오 /* 최대 너비는 원본과 같게, 브라우저 창을 작게 하면 고정 비율로 줄어듦 */ 비디오선택자 { max-width : 100% ; } /* 너비를 화면에 꽉 차게 */ 비디오선택자 { min-width : 100% ; } /* 높이를 화면에 꽉 차게 */..

[CSS] 애니메이션 스타일 (animation) [내부링크]

애니메이션 정의 (시작과 끝 상태 설정) @keyframe 애니메이션이름 { /* 시작 선택자 (0%) */ from { 스타일속성 : 속성값 ; } /* 끝 선택자 (100%) */ to { 스타일속성 : 속성값 ; } } - 0~100% 내의 %를 선택자로 하여 중간 상태 설정 가능 요소에 애니메이션 부여 /* @keyframe에서 정의한 이름과 동일하게 입력 */ 선택자 { animation-name : 애니메이션이름 ; } 애니메이션 실행 시간 지정 선택자 { animation-duration : 실행시간(단위 s) ; } 애니메이션 종료 후 원위치 방법 지정 선택자 { animation-direction : normal | alternate ; } - normal (기본값) : 애니메이션을 끝까..

[CSS] 트랜지션 스타일 (transition) [내부링크]

트랜지션 - 웹 요소의 스타일 속성이 조금씩 자연스럽게 바뀌는 것 트랜지션을 적용할 속성 선택 선택자 { transition-property : all | none | 속성명 ; } - all (기본값) : 요소의 모든 속성이 트랜지션 대상이 됨 - none : 아무 속성도 바뀌지 않음 - 속성명을 콤마로 연결하여 여러 속성에 적용 가능 트랜지션 진행 시간 지정 선택자 { transition-duration : 시간(단위 s) ; } - 트랜지션이 여러 개라면 쉼표로 구분해서 지정 ex) { transition-property : width, height ; transition-duration : 2s, 3s ; } → 2초 동안 너비 변화, 1초 동안 높이 변화 트랜지션 진행 속도 지정 선택자 { tr..

[CSS] 변형 스타일 (transform) [내부링크]

요소 이동 선택자 { transform : translate(x축이동거리, [y축이동거리]) ; } 선택자 { transform : translate3d(x축이동거리, y축이동거리, z축이동거리) ; } 선택자 { transform : translateX(x축이동거리) ; } 선택자 { transform : translateY(y축이동거리) ; } 선택자 { transform : translateZ(z축이동거리) ; } - y값이 추어지지 않으면 x값과 같다고 간주함 요소 확대 및 축소 선택자 { transform : scale(x축배수, [y축배수]) ; } 선택자 { transform : scale3d(x축배수, y축배수, z축배수) ; } 선택자 { transform : scaleX(x축배수) ; ..

[CSS] 정렬 스타일 [내부링크]

배치 - 가로 방향 가운데 정렬 부모선택자 { text-align : center; } 자식선택자 { display : inline-block ; } /* 또는 */ 선택자 { dispaly : block ; margin : 0px auto ; } 배치 - 플렉스 박스 활용 정렬 선택자 { display : flex ; /* 가로 방향 정렬 */ justify-content : 속성값 ; /* 세로 방향 정렬 */ align-items : 속성값 ; } - 속성 값 · flex-start : 주축의 시작점을 기준으로 배치 (왼쪽) · flex-end : 주축의 끝점을 기준으로 배치 (오른쪽) · center : 주축의 중앙을 기준으로 배치 (가운데) · space-between : 첫 번째 항목과 마지막..

[CSS] 표 스타일 [내부링크]

# 관련 포스팅 - 표 태그 : https://young0105.tistory.com/17 캡션 표시 위치 지정 선택자 { caption-side : top | bottom ; } - top (기본값) : 캡션이 표 위쪽에 표시됨 - bottom : 캡션이 표 아래쪽에 표시됨 표 테두리 /* 표 바깥 테두리 */ 테이블선택자 { border : 선두께 선유형 선색상 ; } /* 셀 테두리 */ 테이블선택자 셀선택자 { border : 선두께 선유형 선색상 ; } 표 바깥 테두리와 셀 테두리의 겹치는 부분을 합쳐서 표현 선택자 { border-collapse : collapse | separate ; } - separate (기본값) : 테두리를 따로 표시함 (셀들을 분리함) - collapse : 테두리..

[CSS] 다단 스타일 [내부링크]

단의 너비를 고정해서 화면 분할 선택자 { column-width : 너비 | auto ; } - 화면이 커질수록 단의 개수가 많아짐 단의 개수를 고정해서 화면 분할 선택자 { column-count : 개수 | auto ; } - 화면이 커질수록 단의 너비가 넓어짐 단 합치기 선택자 { column-span : 1 | all ; } - 1 (기본값) : 합치지 않음 - all : 전체 단을 하나로 합쳐 표현함 · 단의 일부만 합칠 수는 없음 단 사이의 경계선 선택자 { column-rule : 선두께 선유형 선색상 ; } 단 사이의 여백 선택자 { column-gap : 여백px ; } 특정 요소의 앞/뒤에 다단 위치 지정 /* 앞 */ 선택자 { break-before : column | avoid-..

[CSS] 배치 스타일 [내부링크]

요소의 배치 속성 ① 블록 라벨 요소 - 요소를 삽입했을 때 혼자 한 줄을 차지하는 요소 ② 인라인 레벨 요소 - 줄을 차지하지 않는 요소 - 화면에 표시되는 콘텐츠만큼만 영역을 차지하고, 나머지 공간에는 다른 요소 가능 선택자 { display : none | block | inline | inline-block | flex ; } - none : 숨김 - block : 다른 요소들을 다른 줄로 밀어내고 혼자 한 줄을 차지함 · width, height, margin, padding 속성을 지정할 수 있음 - inline : 줄바꿈 없이 한 줄에 다른 요소들과 나란히 배치됨 · block 속성 값과의 차이점 : width, height, margin, padding 속성을 지정할 수 없음 - inlin..

[Git] 명령어 [내부링크]

# git 저장소로 지정하기 - git init - 변경 내용이 저장되는 .git 폴더가 생성됨 # 폴더의 현재 변경 상태 확인하기 - git status - 변경된 상태의 파일은 'Working Directory' 상태에 있음 # commit된 결과 확인 - git log - 로그를 간소화해서 한 줄로 보기 : git log --oneline # 저장소 상태 확인 - git config --list # 이전 버전 불러오기 - git checkout 번호 # 한 단계 최근 버전으로 - git checkout - # 가장 최근 버전으로 - git checkout main 깃허브 업로드 과정 1. 'Working Directory' → 'Staging Area' - git add 파일명 → 모든 변경 파일을..

[Git] 깃허브 사용법 [내부링크]

관련 링크 - Git 다운로드 : https://git-scm.com/ - GitHub 주소 : https://github.com 깃허브 저장소 생성하기 1. 우측 상단의 메뉴에서 'Your repositories' 선택 2. Repositories 페이지에서 'New' 선택 3. 설정 후 'Create repository' 선택하면 저장소가 만들어짐 깃허브 저장소에서 가져오기 - 로컬 저장소 폴더로 지정된 상태에서, git clone 저장소주소 입력 완료 시 로컬 저장소 폴더에 깃허브 저장소 폴더가 생성됨 Git Bash에 로컬 저장소로 사용할 폴더 지정하기 방법 1) cd 명령어 사용하기 : cd 폴더주소 1. 폴더 주소 복사하기 2. Git Bash 내에서 붙여넣기 방법 2) 폴더에 들어가서 우..

[Git] 개요 [내부링크]

Git - 분산형 버전 관리 시스템 - 필요성 : 소스 코드, 작업물 등을 관리할 때 편리함 # 버전 관리 시스템 (Version Control System) : 사용자 프로젝트에 포함된 파일의 변경 내역을 추적할 수 있도록 하는 도구/방법론 1) 중앙 집중식 버전 관리 시스템 (SVN) - 중앙 서버에 소스 코드와 history를 직접 저장하는 방식 [단점] · 각 개발자만의 history를 관리할 수 없음 · commit된 내용에 실수가 있을 때, 서버의 다른 개발자에게 바로 영향을 미침 → 중앙 서버에 문제가 생기면 협업 불가능 2) 분산형 버전 관리 시스템 (DVCS, Git) - 여러 개발 PC와 저장소에 분산해서 저장하는 방식 [장점] · 모든 작업자가 원본을 가질 수 있음 → 개별 histo..

[Java] 템플릿 메서드 패턴 (Template Method pattern) [내부링크]

# 관련 포스팅 - 추상 클래스 : https://young0105.tistory.com/46 템플릿 메서드 패턴 (Template Method pattern) - 추상 메서드 or 구현된 메서드를 활용하여, 코드의 흐름(시나리오)를 정의하는 디자인 패턴 - '행위' 디자인 패턴 - final로 선언함 → 자식 클래스가 해당 메서드에 대해 재정의할 수 없게 함 (메서드 오버라이드 금지) - 프레임워크에서 자주 사용됨 - 부모 클래스에서 선언되어, 전체적인 흐름을 정의함 → 각 자식 클래스마다 다르게 구현되어야 하는 부분은 추상 메서드로 선언함 → 자식 클래스는 추상 메서드를 구체화함 - 전체적인 구조는 바꾸지 않으면서, 특정 단계에서 수행하는 내역을 바꿈 // 부모 클래스 파일 // // 메서드1 선언 ..

[Java Code] 배열 - 오름차순 정렬 [내부링크]

코드 public class MainTest2 { public static void main(String[] args) { // 문제 : 배열의 요소를 오름차순 정렬하세요. int[] myNumbers = new int[10]; myNumbers[0] = 10; myNumbers[1] = 4; myNumbers[2] = 100; myNumbers[3] = 23; myNumbers[4] = 51; myNumbers[5] = 1; myNumbers[6] = 6; myNumbers[7] = 88; myNumbers[8] = 42; myNumbers[9] = 31; int temp; // 임시 변수 for (int i = 0; i < myNumbers.length; i++) { for (int j = (i + ..

[Java] 추상 클래스 [내부링크]

추상 클래스 (Abstract class) - 하나 이상의 추상 메서드를 포함하거나, abstract 키워드를 가진 클래스 - 추상적인 개념 → 화면에 나타낼 수 없는 것들 ex) 게임 - 인스턴스화를 할 수 없음 (new 키워드 사용 불가) → 오류 : 부모클래스 참조변수 = new 부모클래스(); → 업 캐스팅 가능 : 부모클래스 참조변수 = new 자식클래스(); // 추상 클래스 접근제어자 abstract class 클래스명 { ... // 추상 메서드 접근제어자 abstract 반환자료형 메서드명(매개변수); } # 추상 메서드 - 구현 코드 없이 메서드의 선언만 있는 메서드 (중괄호 {}가 없음) - 추상 클래스에 추상 메서드가 없을 수는 있음 → 그러나, 추상 메서드가 있으면 반드시 추상 클..

[Java] final 키워드 [내부링크]

final의 기능 ① 상속할 수 없는 클래스 선언 [접근제어자] final class 클래스명 { 코드; } ex) String final의 기능 ② 재정의할 수 없는 메서드 선언 [접근제어자] final 반환자료형 메서드명() { 코드; } - 자식 클래스에서 오버라이드(재정의)할 수 없음 final의 기능 ③ 상수 선언 final 자료형 상수명 = 값; - 값이 변경될 수 없는 상수 선언 - 상수 관련 설명 : https://young0105.tistory.com/8

[Java] 문자열 자료형 (String) [내부링크]

String 자료형 - 문자열을 저장하는 자료형 - 반드시 쌍따옴표(" ")를 사용하여 값을 표기 - 변수를 이용해 객체를 따로 생성하지 않아도 자료형을 사용할 수 있음 (물론, 객체를 생성해서 사용할 수도 있음) # 이스케이프 문자 - 역슬래시(\)를 사용하여 문자열 내부에 특정 문자를 포함시킴 문법 기능 \t [Tab] 키만큼 띄움 \n 줄 바꿈 \" " 출력 \' ' 출력 \\ \ 출력 # 문자열의 값 비교 메서드 문자열1.equals(문자열2); - 문자열1과 문자열2의 '내용'이 완전히 동일하면 true 반환 # 문자열의 주소 값 비교 연산자 문자열1 == 문자열2; - 문자열1과 문자열2의 '주소 값'이 동일하면 true 반환 # 주소 값 확인 System.out.println(System.i..

[Java] 상속 관계의 다형성과 참조형 형 변환 [내부링크]

# 관련 포스팅 - 상속 : https://young0105.tistory.com/42 다형성 (Polymorphism) - 하나의 코드 형태가 다양한 자료형으로 구현되어 실행될 수 있음 (자료형을 다양한 형태로 바라볼 수 있음) → 같은 코드에서 여러 실행 결과가 나타남 - 장점 : 유연성, 확장성, 유지보수성 - 객체지향 프로그래밍의 큰 특징 중 하나 # 상속 관계에서의 다형성 - 자식 클래스는 부모 클래스를 확장한 형태임 → '자식 클래스'는 '부모 클래스'라고 할 수 있음 ex) '호랑이'는 '동물'이다 (반대로 '부모 클래스'는 '자식 클래스'라고 할 수 없음) → 자식 클래스는 자신의 클래스로도 볼 수 있고, 부모 클래스로도 볼 수 있음 - 메서드 선언 시 매개변수로 부모 클래스를 기입한 경우..

[Java] 상속 관계와 메서드 오버라이드 [내부링크]

클래스 상속 (Inheritance) // 상속 class 자식클래스 extends 부모클래스 { 코드; } - 자식 클래스가 부모 클래스의 멤버변수/메서드를 물려 받음 - 새로운 클래스를 정의할 때, 이미 구현된 다른 클래스를 상속받아서 속성/기능을 확장시켜 클래스를 구현함 → 상속을 하는 부모 클래스보다 상속을 받는 자식 클래스의 데이터가 더 크고 구체적임 ( == 부모 클래스는 자식 클래스보다 더 일반적임) - 상속받는 클래스끼리 멤버변수/메서드가 동일하면, 자식 클래스 파일에서는 코드를 제거하고 부모 클래스에만 입력해도 상속받아서 사용할 수 있음 - 자식 클래스 객체로 어떤 메서드를 실행하면, 우선 자식 클래스 자신에게 그 메서드가 있는지 확인함 → 자신에게 해당 메서드가 없다면 부모 클래스에 있..

[Java] 배열 [내부링크]

배열 (Array) - 연관된 데이터들을 하나의 변수에 모아서 통으로 관리하기 위해 사용하는 리스트 자료 구조 - 여러 개의 데이터를 하나의 변수에 저장하기 위한 것 HTML 삽입 미리보기할 수 없는 소스 - '배열'의 자료형과 '배열 값'의 자료형은 다름 ex) (배열 값 자료형 int) != (배열 자료형 int[]) → 변수 자료형이나 반환 자료형 등을 입력할 때는 '배열'의 자료형을 입력해야 함 - 배열 선언 시, 자동으로 자료형의 기본값에 따라 초기화됨 → int : 0 // double : 0.0 // boolean : false // 참조자료형(String 등) : null - 기본 자료형 배열은 선언과 동시에 배열 크기 만큼의 메모리가 할당됨 - 객체 배열의 메모리 공간에는 heap 메모리..

[Java] static 키워드 [내부링크]

static 변수 (클래스 변수, 정적 변수) // 선언 static 자료형 멤버변수명; - 여러 객체들이 공유하는 하나의 변수(데이터)가 필요할 때 사용하는 멤버변수 - 객체가 생성되기 이전 (new 키워드 이전), 처음 프로그램이 메모리에 로딩될 때 메모리를 할당 받음 → 객체 생성과 관계 없이 해당 멤버변수에 접근할 수 있음 → 참조변수 대신, 클래스 이름으로 직접 참조 가능 : 클래스명.멤버변수명 - 객체(인스턴스)들이 공통으로 사용하는 영역 → 모든 객체가 같은 값을 담고 있음 → static 변수만 사용하면 각각의 객체가 고유한 상태 값을 가지도록 할 수 없음 → 다른 멤버변수를 활용해서 저장하기 // 예시 : 다른 멤버변수를 활용해 각 객체들에게 고유한 값 할당 // // 멤버변수 publi..

[Java] this 키워드와 super 키워드 [내부링크]

this의 기능 ① 자기 자신(객체)을 가리킴 // 예시 // // 멤버변수 private String name; private int age; // 생성자 public Person(String name, int age) { // *** 여기서 this는 자기 자신을 가리킴 *** this.name = name; this.age = age; } this의 기능 ② 생성자에서 다른 생성자를 호출함 // 예시 // // 멤버변수 private String name; private int age; private String phone; // 생성자 1 public Person(String name, int age) { this.name = name; this.age = age; } // 생성자 2 public..

[Java Code] 배열 - 도서 정보 등록·조회·삭제 프로그램 구현 [내부링크]

코드 # Book 클래스 public class Book { // 멤버변수 private int totalPage; // 페이지 수 private String title; // 책 제목 private String author; // 작가명 public Book(String title, String author) { this.title = title; this.author = author; } public Book(int totalPage, String title, String author) { this(title, author); this.totalPage = totalPage; } public int getTotalPage() { return this.totalPage; // 가독성을 높이려면 this..

[CSS] 배경 스타일과 색 표기법 [내부링크]

색 표기법 1) 16진수 표기법 : #ffffff (빨강/초록/파랑) - 최대 : ff, 최소 : 00 2) rgb 표기법 : rgb(빨강, 초록, 파랑, [투명도]) - 최대 : 255, 최소 : 0 - 투명도 : 0(투명) ~ 1(불투명) 3) hsl 표기법 : hsl(색상%, 채도%, 밝기%, [투명도]) - 투명도 : 0(투명) ~ 1(불투명) 4) 색상 이름 표기법 - 기본 색상 16가지 배경 스타일 # 배경 색 선택자 { background-color : 색상 ; } # 배경 적용 범위 선택자 { background-clip : border-box | padding-box | content-box ; } - border-box (기본값) : 테두리까지 적용 - padding-box : 테두리 ..

[CSS] 목록 스타일 [내부링크]

# 관련 포스팅 - 목록 태그 : https://young0105.tistory.com/16 목록 스타일 # 목록 태그의 글머리표 종류 변경 선택자 { list-style-type : none | 순서없는목록속성 | 순서있는목록속성 ; } 1) 불릿 제거 : none 2) 순서 없는 목록의 글머리표 변경 속성 - disc (기본값) : 채운 원 () - circle : 빈 원 () - square : 채운 사각형 () 3) 순서 있는 목록의 글머리표 변경 속성 i. 십진수 - decimal (기본값) : 1로 시작 - decimal-leading-zero : 0으로 시작 ii. 알파벳 - lower-alpha : 소문자 - upper-alpha : 대문자 iii. 로마 숫자 - lower-roman..

[Java] 접근 제어 지시자와 get(), set() 메서드 [내부링크]

접근 제어 지시자 (Access modifier) - 특정 대상에 대해, 클래스 외부로부터의 접근 권한을 부여하는 명령어 → 대상 : 변수, 메서드, 함수, 클래스 등 대부분 // 예시 private int 변수; 접근 제어 지시자 private 같은 클래스 (java 파일) 내부에서만 접근 가능 default (기본값) 같은 패키지 내부에서만 접근 가능 protected 같은 패키지 내부에 있거나, 다른 패키지여도 상속 관계의 클래스일 때는 접근 가능 public 같은 프로젝트 내라면 어디에서든지 접근 가능 # 외부에서 멤버변수의 값을 수정하지 못하게 하기 - 멤버변수에 접근 제어 지시자 'private' 할당 → 메서드를 이용한 값 수정은 가능하지만, 멤버변수에 직접 값을 수정할 수는 없게 됨 1) ..

[CSS] 텍스트 스타일 [내부링크]

글꼴 스타일 # 글꼴 지정 선택자 { font-family : 글꼴명1, [글꼴명2, 글꼴명3, ...] ; } - 지정한 글꼴이 없을 경우에 대비해서 2, 3, ... 번째 글꼴까지 지정해둘 수 있음 # 글자 크기 조절 선택자 { font-size : 절대크기 | 상대크기 | 숫자 | 백분율 ; } - 속성 값 · 절대 크기 : xx-small | x-small | small | medium | large | x-large | xx-large · 상대 크기 : larger | smaller · 크기 i. em : 대문자 M의 너비를 1로 뒀을 때의 기준으로 크기 조절 ii. ex : 소문자 x의 높이를 1로 뒀을 때의 기준으로 크기 조절 iii. px (픽셀) iv. pt (포인트) · 백분율 : 부모..

[Java] 포함 관계 구현 중 NullPointerException 발생 [내부링크]

# 관련 포스팅 - 생성자 : https://young0105.tistory.com/29 java.lang.NullPointerException 원인 ① new 키워드를 사용하지 않아, 메모리에 아직 로드되지 않은 경우 ② . 연산자를 잘못 사용한 경우 에러 발생 코드 - 포함 관계인 Student 클래스와 Subject 클래스 설계 - Student 클래스에 Subject를 참조 자료형으로 사용한 멤버 변수(국어)를 생성함 # Subject 클래스 파일 public class Subject { // 멤버변수 // String subjectName; // 과목 이름 int score; // 과목 점수 } # Student 클래스 파일 public class Student { // 멤버변수 // int s..

[Java] 객체와 클래스 3 : 생성자 [내부링크]

# 관련 포스팅 1. 객체 지향 패러다임과 멤버 변수 : https://young0105.tistory.com/13 2. 메서드 : https://young0105.tistory.com/28 3. (현재 글) 생성자 : https://young0105.tistory.com/29 생성자 (Constructor) - 객체를 생성할 때, 객체의 형태에 대한 강제성을 부여하는 것 - 객체를 생성하기 위해 'new' 키워드와 함께 호출됨 → 객체가 메모리에 로드될 때 가장 먼저 수행되는 코드 - 객체가 생성될 때 변수/상수를 초기화하는 기능의 코드가 포함됨 - 생성자 내에서 메서드 호출 가능 - 클래스에는 반드시 적어도 하나 이상의 생성자가 존재함 - 반환 값이 없음 → 선언부에 반환 자료형이 없음 - 생성자 이..

[Java] 객체와 클래스 2 : 메서드 (멤버 함수) [내부링크]

# 관련 포스팅 1. 객체 지향 패러다임과 멤버 변수 : https://young0105.tistory.com/13 2. (현재 글) 메서드 : https://young0105.tistory.com/28 3. 생성자 : https://young0105.tistory.com/29 메서드 (Method, 멤버 함수) - 클래스 내부에서, 자신의 멤버 변수를 활용해서 객체의 기능을 수행하는 행위 - 함수와 유사하지만, 보다 명확하고 구체적임 - 중첩 메서드 구현 불가능 (메서드 안에 메서드 선언 불가능) 메서드 구현 public class 클래스명 { // 상태 (멤버변수) // 자료형 멤버변수1; ... // 기능 (메서드) // // 메서드 선언 public 반환자료형 메서드1(매개변수) { // 자료형을..

[Java] 스택 메모리와 힙 메모리 [내부링크]

스택 메모리 (Stack memory) - 함수가 호출될 때, 그 함수의 지역변수들에게 할당되는 메모리 - 함수의 수행이 끝나면 자동으로 반환됨 - 밑에서 위로 쌓아 올라가며 생기고, 위에서부터 사라짐 → LIFO (Last Input First Output) : 가장 나중에 들어온 것이 가장 먼저 나감 힙 메모리 (Heap memory, 동적 메모리) - 메모리 공간의 크기가 늘었다가 줄었다가 동적으로 변함 - 'new' 키워드를 통해 객체가 생성되면, 힙 메모리에 해당 객체와 멤버변수 값이 할당됨 - 하나의 클래스로부터 여러 개의 객체(인스턴스)가 생성되고, 각각 다른 메모리 주소를 가짐 → 참조변수에 객체의 메모리 주소 값(참조 값)이 저장되며, 참조변수는 스택 메모리에 할당됨 → 참조 값을 통해 ..

[CSS] 박스 모델 (크기, 테두리, 마진, 패딩) [내부링크]

박스 모델 - 실제 콘텐츠 영역, 패딩, 테두리, 마진 등의 요소로 구성됨 - 확인 : [F12] - [개발자 도구] 박스 모델 너비 기준 설정 선택자 { box-sizing : content-box | border-box ; } - content-box (기본값) : width 속성 값을 콘텐츠 영역 너비 값으로 사용함 - border-box : width 속성 값을 (콘텐츠 영역 + 패딩 + 테두리)의 너비 값으로 사용함 너비 (width) & 높이 (height) 선택자 { width : 너비px | 백분율 | auto ; height : 높이px | 백분율 | auto ; } - min-width : 100% → 너비를 화면에 꽉 차게 함 - min-height : 100% → 높이를 화면에 꽉 ..

[CSS] 가상 선택자 : 가상 클래스와 가상 요소 [내부링크]

사용자 동작에 반응하는 가상 클래스 # 마우스 커서를 올려 놓을 때 선택자:hover { 스타일속성 : 속성값 ; } # 마우스로 클릭할 때 선택자:active { 스타일속성 : 속성값 ; } # 초점이 맞춰졌을 때 (Tab 키) 선택자:focus { 스타일속성 : 속성값 ; } # 방문하지 않은 링크일 때 선택자:link { 스타일속성 : 속성값 ; } # 방문한 링크일 때 선택자:visited { 스타일속성 : 속성값 ; } UI 요소 상태에 따른 가상 클래스 # 요소를 사용할 수 있을 때 선택자:enabled { 스타일속성 : 속성값 ; } # 요소를 사용할 수 없을 때 선택자:disabled { 스타일속성 : 속성값 ; } # 라디오 버튼 or 체크 박스에서 항목을 선택했을 때 선택자:checke..

[CSS] 선택자 [내부링크]

기본 선택자 # 전체 선택자 - 페이지에 있는 모든 요소를 대상으로 스타일을 적용함 - 브라우저마다 패딩과 마진의 기본값이 다름 → 전체 선택자를 사용하여 0으로 리셋할 수 있음 * { 스타일속성 : 속성값 ; } # 태그 선택자 - 문서에서 해당 태그를 사용한 모든 요소를 대상으로 스타일을 적용함 태그 { 스타일속성 : 속성값 ; } # 클래스 선택자 - .과 class가 대응됨 # id 선택자 - #과 id가 대응됨 # 그룹 선택자 - 같은 스타일을 사용하는 선택자들을 한 번에 정의함 선택자1, 선택자2, ... { 스타일속성 : 속성값 ; } 연결 선택자 (조합 선택자) # 하위 선택자 - 상위 요소에 포함된 모든 하위 요소에 스타일이 적용됨 상위요소 하위요소 { 스타일속성 : 속성값 ; } # 자..

[CSS] 개요 [내부링크]

CSS (Cascading Style Sheet) ... - 브라우저에게 웹 사이트가 어떻게 보여져야 하는지 알려주는 언어 - Style sheet : 스타일을 관리하기 쉽도록 한 군데에 모아놓은 것 - HTML에 종속적임 (독립적으로 쓰일 수 없음) - 선택자 : 스타일 규칙이 적용될 대상 - 태그들의 포함 관계에 따라 부모 요소의 스타일을 자식 요소로 상속함 스타일의 우선순위 - 인라인 스타일 → id 스타일 → class 스타일 → 태그 스타일 - 우선순위가 같다면 나중에 입력된 스타일이 앞 스타일을 덮어씀 # 중요 스타일 !important - 우선순위가 동일한 스타일이 있을 때, 중요 스타일로 지정된 것이 가장 우선적으로 실행됨 내부 스타일 시트 # 인라인 스타일 - 스타일 시트를 사용하지 않고..

[HTML] 폼 태그 [내부링크]

폼 생성 태그 폼 요소 - 속성 1) method 속성 · method = "get" : 사용자가 입력한 내용을 그대로 노출한 채로 서버로 넘김 · method = "post" : 사용자가 입력한 내용이 드러나지 않은 채로 서버로 넘김 2) action 속성 : 태그 안의 내용들을 처리할 서버 상의 프로그램을 지정함 · URL 3) target = "_blank" : 스크립트 파일을 현재 창이 아닌 다른 위치로 열도록 지정함 4) name = "폼 이름" 폼 요소 그룹화 구역 제목 폼 요소 폼 요소 이름 부여 - 이름을 클릭했을 때 폼 요소가 자동으로 선택되도록 함 텍스트 텍스트 값을 입력받는 태그 태그의 속성 id = "아이디명" - 폼 요소를 구분하기 위한 용도 name = "key" - 폼 내용을 ..

[HTML] 멀티미디어 태그 [내부링크]

외부 파일 삽입 오디오/비디오 삽입 - 속성 1) autoplay : 오디오/비디오를 자동 재생함 2) controls : 컨트롤 막대를 표시함 (재생/정지, 진행 바, 볼륨 등) 3) loop : 오디오/비디오를 반복 재생함 4) muted : 오디오/비디오를 재생하지만 소리는 음소거함 5) preload : 재생 버튼을 눌러 재생하기 전에, 오디오/비디오 파일을 다운로드해서 준비함 6) poster = "경로/이미지명.확장자" : 영상 재생 전 초기 화면(썸네일)을 지정함 여러 코덱의 파일을 함께 지정 대체텍스트 대체텍스트 ... [] - 최신 브라우저와 이전 브라우저에서 모두 재생할 수 있도록 함 - 파일이 정상적으로 재생되면 대체 텍스트는 화면에 표시되지 않음 비디오에 외부 자막 파일 연결 - 속..

[HTML] 이미지 태그 [내부링크]

이미지 삽입 - 속성 1) alt = "대체 텍스트" · 이미지를 표시할 수 없는 상황일 때 표시되는 대체 텍스트 2) widhth = "너비px" 3) height = "높이px" 이미지 설명글 삽입 설명글 - 태그가 태그의 위 or 아래에 입력된 것에 따라 이미지의 위 or 아래에 설명글이 표시됨

[HTML] 링크 태그 [내부링크]

링크 태그 텍스트 - target 속성 : 페이지 표시 방법 1) target = "_self" (기본값) : 링크가 있는 페이지에서 그대로 열림 2) target = "_blank" : 새 탭/창에서 열림 3) target = "_top" : 전체 화면으로 열림 (iframe 태그로 외부 문서를 불러올 경우 전체 화면으로 표시) - title 속성 : 커서를 올렸을 때 제목이 표시되도록 함 # 이동 기능이 없는 링크 텍스트 외부 문서를 현재 문서에 삽입하는 태그 앵커 (anchor) 텍스트/이미지 텍스트/이미지 - 한 페이지 안에서, 특정 위치로 한 번에 이동하도록 하는 링크를 만듦 - '출발 위치' 링크를 누르면 '도착 위치'로 이동하게 됨 이미지맵 - 한 이미지 상에 영역을 지정하여 여러 개의 다른..

[HTML] 표 태그 [내부링크]

표 생성 태그 1행 1열 (제목 셀) 1행 2열 1행 3열 … 2행 1열 (제목 셀) 2행 2열 2행 3열 … # 셀 병합 태그 셀 내용 셀 내용 표 제목 태그 ① 위쪽에만 표시 가능한 표 제목 태그 : 표 제목 ... - 코드의 위치와 관계 없이, 제목이 표의 위쪽 중앙에 표시됨 ② 위쪽/아래쪽 모두 표시 가능한 표 제목 태그 : , 표 제목 - 태그가 태그의 위 or 아래에 입력된 것에 따라 표의 위 or 아래에 제목이 표시됨 - 좌측 정렬로 제목이 표시되며, 표가 자동으로 들여쓰기됨 표 구조 정의 태그 - 표의 구조를 제목(thead), 본문(tbody), 요약(tfoot) 부분으로 나눔 - 표의 이해를 돕기 위해 사용함 표 제목 ~ ~ ~ 셀별 스타일 지정 태그 셀 내용 - 스타일 속성 1) 너비..

[HTML] 목록 태그 [내부링크]

순서가 없는 목록 - 각 항목 앞에 글머리표(불릿)가 붙여짐 항목1 항목2 ... # 하위 글머리표를 만들고 싶은 경우 상위 글머리표1 하위 글머리표1 하위 글머리표2 ... 상위 글머리표2 ... 순서가 있는 목록 - 각 항목 앞에 순서에 따른 글머리표가 붙여짐 (default : 숫자) 항목1 항목2 ... 제목과 설명으로 이뤄진 목록 - 설명은 들여쓰기되어 표시됨 제목1 설명1 설명2 ...

[HTML] 텍스트 태그 [내부링크]

텍스트를 묶어주는 태그 # 제목 표시 - 텍스트 · 크기 : h1 > h2 > h3 > h4 > h5 > h6 # 단락 나누기 - 텍스트 # 줄 바꾸기 - # 들여쓰기 - 텍스트 · 다른 텍스트보다 안으로 들여 써짐 # 입력된 공백을 그대로 표시 - 텍스트 · 해당 태그를 사용하지 않으면 코드 내 들여쓰기가 표현되지 않음 # 줄 바꿔 영역 묶기 - 텍스트 # 줄 바꿈 없이 영역 묶기 (인라인) - 텍스트 - 스타일 적용 : 텍스트 # 따옴표 추가 - 텍스트 · 줄 바꿈 없이, 내용 앞뒤에 쌍따옴표를 추가함 # 수평 줄 생성 - · 주제가 바뀔 때 분위기를 전환하는 용도 글자 효과 태그 # 굵게 - 텍스트 · 보기에는 와 똑같지만, 의미적으로 강조됨 (Sementic element) - 텍스트 # 이탤릭체..

[Java] 함수 [내부링크]

함수 (Function) - 객체와 상관없이 독립적으로 어떠한 기능을 수행하는 일련의 코드 묶음 - 여러 곳에서 동일한 방식으로 호출되어 사용될 수 있음 public class 클래스명 { //// 함수를 정의하는 코드 //// // 함수 선언부 static 반환자료형 함수명(자료형a 매개변수a, 자료형b 매개변수b, ...) { // 함수 구현부 (body) 코드 ; ... return 반환값; } public static void main(String[] args) { //// 함수를 호출하는 코드 //// 함수명(매개변수a, 매개변수b, ...); } } # 함수 정의 - 함수 선언부의 자료형에 따라 함수가 반환(return)하는 값의 자료형이 정해짐 → return 키워드 입력 시, 함수 선언부의..

[Java] 형 변환 [내부링크]

형 변환 (Type conversion) - 서로 다른 자료형 간에 연산 등의 수행을 위해 하나의 자료형으로 통일하는 것 자동 형 변환 (묵시적 형 변환, Explicit type conversion) - 메모리 공간 크기가 더 작은 자료형에서 더 큰 자료형으로 변환하는 경우 - 단순히 대입하면 자동으로 형 변환됨 - 형식 : (새_자료형) 새_변수 = 기존_변수; // 예시 // int a; // 형 변환할 변수 double b = a; 강제 형 변환 (명시적 형 변환, Implicit type conversion) - 메모리 공간 크기가 더 큰 자료형에서 더 작은 자료형으로 변환하는 경우 - 메모리 공간 크기가 같은 자료형 간에 변환하는 경우 - 형식 : (새_자료형) 기존_변수; // 예시 // d..

[Java] 상수와 리터럴 [내부링크]

상수 (Constant) - 변하지 않는 수 ex) 원주율 3.14, 1년 12개월 - 값을 한 번 저장하면 변경할 수 없는 저장공간 - 변하지 않는 값을 반복해서 사용할 때 상수를 이용함 상수의 선언과 초기화 final 자료형 상수명 = 값; - 선언 후에 단 한 번만 초기화할 수 있음 → 이미 초기화된 값은 다른 줄의 코드로 변경할 수 없음 - 값을 변경할 때에는 상수 초기화 부분의 값만 변경하면 됨 - 상수명 권장 사항 : 대문자로 입력하고, 여러 단어를 연결하여 이름을 지을 때는 '_' 활용 리터럴 (Literal) - 현실 세계에서 사용하는 '상수'와 같은 의미의 단어 ex) 10, 123, 'A' - 큰 숫자를 입력할 때 가독성 높이기 ex) 1000 == 1_000 (현실 세계에서 1,000..

[Java] 객체와 클래스 1 : 객체 지향 패러다임과 멤버 변수 [내부링크]

# 관련 포스팅 1. (현재 글) 객체 지향 패러다임과 멤버 변수 : https://young0105.tistory.com/13 2. 메서드 : https://young0105.tistory.com/28 3. 생성자 : https://young0105.tistory.com/29 클래스 (Class) - 객체를 정의하는 설계도 - 객체의 속성을 정의하고, 기능을 구현하여 만들어 둔 코드 상태 - 추상적이고 포괄적인 개념 ex) 동물 - 클래스 명명 규칙 : 대문자로 시작할 것 - public 클래스는 java 파일에 단 하나만 존재하며, public 클래스명과 java 파일명이 동일함 객체 (Object, Instance) - 'new' 키워드를 통해 실제 메모리에 로드된 것 (클래스를 메모리에 생성한 상..

[Java] 참조 자료형 (Scanner, Random) [내부링크]

# 관련 포스팅 - 기본 자료형 : https://young0105.tistory.com/7 참조 자료형 (Reference data type) - 기본 자료형을 제외한 나머지 모든 자료형이 속함 (내장 클래스, 사용자 정의 타입, ...) - 값을 가지는 게 아니라, 객체의 메모리 주소 값(참조 값)을 가지는 자료형 - 사용하는 메모리 크기가 클래스에 따라 달라짐 → 메모리 크기를 직관적으로 알 수 없음 - 참조 자료형 명명 규칙 : 대문자로 시작할 것 - 같은 패키지에 존재하지 않는 .java 파일인 경우, import 예약어를 통해 불러오기 (String 제외) Scanner - 사용자가 키보드로 입력한 값을 받아들임 // Scanner 불러오기 import java.util.Scanner; pub..

[Java] 제어문 : 조건문과 반복문 (if, switch, for, while) [내부링크]

조건문 if if (조건식) { 수행문; ... } else if (조건식) { 수행문; ... } else { 수행문; ... } 조건문 switch-case switch (변수) { case 값1 : // 콜론이어야 함에 유의 코드1; // 변수가 해당 값과 일치하면 코드 실행 break; // break를 작성하지 않으면 계속 다음 case로 넘어가게 됨 case 값2 : 코드2; break; case 값3 : 코드3; break; ... // 변수가 모든 case 값과 불일치하거나, 입력되지 않은 경우 [default : 코드n;] } - switch에 기입된 변수의 값이 case의 값과 일치하면, 그 아래의 코드를 실행함 - break 문이 없으면 계속 다음 case로 넘어가서 의도치 않은 결과..

[Java] 연산자 [내부링크]

항과 연산자 ① 항 (Operand) : 연산에 사용되는 값 (리터럴, 변수 등) ② 연산자 (Operator) : 항을 이용하여 연산하는 기호 - 연산자 우선순위 · 가장 높은 순위 : () [] . · 가장 낮은 순위 : = 대입 연산자 - 변수에 다른 변수나 값을 대입하는 연산자 (=) - 형식 : L value = R value; · 대입 연산자의 연산 방향 : R value → L value 부호 연산자 - 변수의 부호를 +로 유지하거나, -로 바꾸는 연산자 - 형식 : 대입할_변수 = - 기존_변수; - 항이 하나인 단항 연산자 - 실제 값을 변경하려면 대입 연산자를 사용해야 함 산술 연산자 A + B A와 B를 더하기 A - B A에서 B를 빼기 A * B A와 B를 곱하기 A / B A에서..

[Java] 변수와 기본 자료형 [내부링크]

데이터 (Data) - 사실을 나타내는 각각의 수치 - 컴퓨터는 0과 1로만 데이터를 저장함 데이터의 단위 ① bit (비트) - 컴퓨터가 표현하는 데이터의 최소 단위 - 2진수 1개의 값을 저장할 수 있는 크기 - 물리적 단위 ② byte (바이트) - 1 byte = 8 bit - 연산의 최소 단위 - 가장 앞의 1 bit는 부호(+, -)를 표현하는 부호 비트 - 논리적 단위 변수 (Variable) - 값을 저장할 수 있는 메모리 공간 - 계속 변할 수 있는 수 - 할당된 메모리를 가리키는 이름 변수의 선언과 초기화 - 변수의 선언 : 자료형 변수명; - 변수의 초기화 : 변수명 = 값; - 변수의 선언 및 초기화 : 자료형 변수명 = 값; 변수 명명 규칙 - 대소문자가 구분됨 - 길이에 제한이 ..

[Java] 개요 [내부링크]

Java 특징 - 프로그램이 안정적임 - JVM → 다양한 환경에서 사용할 수 있음 - 풍부한 기능이 제공됨 # 객체 지향 언어 (OOP, Object Oriented Programming) - 객체와 객체 간에 관계를 형성하고, 서로 상호 작용하게 코드를 설계해 나가는 것 - 객체 : 상태(속성/변수)와 기능(함수/메서드)를 갖는 구체적인 개체 - 유지보수 쉬움 - 재활용성 높음 - 기본 원리 : 목적에 따라 코드를 클래스화하면, 필요할 때마다 가져와서 사용할 수 있음 - 가장 큰 특징 : 정보 은닉, 상속, 다형성 등 JAVA 기본 구조 package 패키지명; public class 클래스명 { // 코드의 시작점 main 함수 public static void main(String[] args..

[HTML] 개요 [내부링크]

HTML (Hyper Text Markup Language) - 웹에서 자유롭게 오갈 수 있는 웹 문서를 만드는 언어 - 정보를 탐색할 때 순차적으로 검색하는 것이 아니라, 뛰어 넘으면서 필요한 것들만 찾음 - Markup : HTML 문서를 구조적으로 표현하는 것 → 제목, 본문 등의 영역을 명확히 구분해서 알아보기 쉬움 - 컴퓨터는 인간의 언어를 이해할 수 없기 때문에, 모든 것을 알려줘야 함 → HTML : 브라우저의 구성요소인 'Contents'를 컴퓨터에게 알려주기 위해 사용하는 언어 - 웹 브라우저 : 웹 문서를 보는 프로그램 - 웹 편집기 : 웹 문서를 작성하는 프로그램 - 웹 표준 : 장소/브라우저와 상관없이 쉽게 웹 사이트를 볼 수 있게 하는 표준 HTML 문서 기본 구조 ... 브라우저..

[Java] 이클립스(Eclipse) 단축키 [내부링크]

코드 실행 - [Ctrl] + [F11] 코드 줄 추가 - [Shift] + [Enter] 코드 삭제 - [Ctrl] + [D] 코드 힌트 (자동 완성) - [Ctrl] + [Space] 코드 라인 복사 - [Ctrl] + [Alt] + [방향키 ↓] 코드 줄맞춤 정렬 - [Ctrl] + [Shift] + [F] 주석 처리 - [Ctrl] + [/] - 한 줄 주석 : // - 여러 줄 주석 : /* * */ 파일 이름 변경 - [F2] get(), set() 메서드 자동 생성 - [Shift] + [Alt] + [S] → [Generate Getters and Setters] 불필요한 import 구문 정리 - [Ctrl] + [Shift] + [O] 클래스 계층 구조 확인 - 해당 클래스에 포커스를 ..

[HTML] 비주얼 스튜디오 코드 단축키 [내부링크]

HTML 기본 구조 생성 - ! 입력 → [Tab] 또는 - html:5 입력 저장 - [Ctrl] + [S] 웹 문서 확인 - Open in browser : [Shift] + [Alt] + [B] - Live server : [Alt] + [L] → [Alt] + [O] 주석 처리 - [Ctrl] + [/] - 같은 이름의 태그 여러 개 생성 - 태그명*개수 ex) li*5 하위 태그로 자동 생성 - 상위태그>하위태그 입력 → [Enter] 코드 삭제 - [Shift] + [Delete] 코드 라인 복사 - [Shift] + [Alt] + [방향키 ↓] 코드 위치 이동 - [Alt] + [방향키 ↑↓] 코드 힌트 (자동 완성) - [Ctrl] + [Space] 실행 취소 - [Ctrl] + [Z] 실..