Help
RSS
API
Feed
Maltego
Contact
Domain > blog.inlee.kr
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2014-11-27
31.220.16.193
(
ClassC
)
2025-01-22
172.67.185.235
(
ClassC
)
Port 80
HTTP/1.1 200 OKDate: Wed, 22 Jan 2025 02:02:45 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-aliveLast-Modified: Mon, 18 Mar 2024 02:27:59 GMTAccess-Control-Allow-Origin: *expires: Wed, 22 Jan 2025 02:12:44 GMTCache-Control: max-age600x-proxy-cache: MISSX-GitHub-Request-Id: 2B2E:30CE9B:773A16:7A0BA7:679051C4Age: 0Via: 1.1 varnishX-Served-By: cache-pao-kpao1770057-PAOX-Cache: MISSX-Cache-Hits: 0X-Timer: S1737511365.884210,VS0,VE154Vary: Accept-EncodingX-Fastly-Request-ID: 624537b1cf4b826f793184745d381d091922df88cf-cache-status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?sDXwfzMpaoCefr3dWufqREbBeaV0GPd96WfmFSoae3i%2B6sQviQqn1BtG0JhlaraJiXYUmxMcCkyL9Uju7rS4pP1aEish7gHFT2R4PqONNvLKMdpfmgyafqdmEpnhAOV5t},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 905bf6ae2d45a3c8-SEAalt-svc: h3:443; ma86400server-timing: cfL4;desc?protoTCP&rtt9115&min_rtt9115&rtt_var4557&sent1&recv3&lost0&retrans0&sent_bytes0&recv_bytes52&delivery_rate0&cwnd249&unsent_bytes0&cid0000000000000000&ts0&x0 !DOCTYPE html>html langen>head> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width, initial-scale1> meta namegoogle-translate-customization content108d9124921d80c3-80e20d618ff053c8-g4f02ec6f3dba68b7-c>!-- Begin Jekyll SEO tag v2.8.0 -->title>Inlee’s Blog | All of Code/title>meta namegenerator contentJekyll v3.9.5 />meta propertyog:title contentInlee’s Blog />meta nameauthor contentinlee />meta propertyog:locale contenten_US />meta namedescription contentAll of Code />meta propertyog:description contentAll of Code />link relcanonical hrefhttps://blog.inlee.kr/ />meta propertyog:url contenthttps://blog.inlee.kr/ />meta propertyog:site_name contentInlee’s Blog />meta propertyog:type contentwebsite />meta nametwitter:card contentsummary />meta propertytwitter:title contentInlee’s Blog />meta namegoogle-site-verification contentp512jSguWG2fS0RhsEYL5oBEW8BDHDRWOpY96CvJmHU />script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,author:{@type:Person,name:inlee},description:All of Code,headline:Inlee’s Blog,name:Inlee’s Blog,url:https://blog.inlee.kr/}/script>!-- End Jekyll SEO tag -->link relshortcut icon hreffavicon.png> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/typeface-noto-sans@0.0.72/index.min.css> link relstylesheet href/assets/css/main.css> script src/assets/js/main.js>/script>link typeapplication/atom+xml relalternate hrefhttps://blog.inlee.kr/feed.xml titleInlees Blog />script> function initGoogleAnalytics() { var doNotTrack (window.doNotTrack 1 || navigator.doNotTrack 1 || navigator.doNotTrack yes || navigator.msDoNotTrack 1); var enableDNT true true; if (!enableDNT || !doNotTrack) { (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, G-BS686XJ0FL, auto); ga(send, pageview); } } window.addEventListener(load, initGoogleAnalytics);/script>link relstylesheet href//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/default.min.css>script src//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js>/script>!-- and its easy to individually load additional languages -->script charsetUTF-8 srchttps://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/languages/go.min.js>/script>script>// Init highlight jsdocument.addEventListener(DOMContentLoaded, function(event) { var els document.querySelectorAll(pre code) function addLangData(block) { var outer block.parentElement.parentElement.parentElement; var lang block.getAttribute(data-lang); for (var i 0; i outer.classList.length; i++) { var cls outer.classListi; if (cls.startsWith(language-)) { lang cls; break; } } if (!lang) { cls block.getAttribute(class); lang cls ? cls.replace(hljs , ) : ; } if (lang.startsWith(language-)) { lang lang.substr(9); } block.setAttribute(class, hljs + lang); block.parentNode.setAttribute(data-lang, lang); } function addBadge(block) { var enabled (true || true).toLowerCase(); if (enabled true) { var pre block.parentElement; pre.classList.add(badge); } } function handle(block) { addLangData(block); addBadge(block) hljs.highlightBlock(block); } for (var i 0; i els.length; i++) { var el elsi; handle(el); }});/script>style> /* code language badge */ pre.badge::before { content: attr(data-lang); color: #fff; background-color: #ff4e00; padding: 0 .5em; border-radius: 0 2px; text-transform: uppercase; text-align: center; min-width: 32px; display: inline-block; position: absolute; right: 0; } /* fix wrong badge display for firefox browser */ code > table pre::before { display: none; }/style>/head>body>header classsite-header site-header-transparent rolebanner> div classwrapper> div classsite-header-inner>span classsite-brand>a classsite-brand-inner relauthor href/> img classsite-favicon titleInlee's Blog srcfavicon.png onerrorthis.style.displaynone> Inlee's Blog/a>/span>nav classsite-nav> input typecheckbox idnav-trigger classnav-trigger /> label fornav-trigger> span classmenu-icon> svg viewBox0 0 18 15 width18px height15px> path dM18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z/> /svg> /span> /label> div classtrigger>a classpage-link href/about.html>ABOUT/a>a classpage-link href/archives.html>ARCHIVES/a>a classpage-link href/categories.html>CATEGORIES/a>a classpage-link href/>HOME/a>a classpage-link href/tags.html>TAGS/a>span classpage-link>div idgoogle_translate_element styledisplay: none;>/div>span classct-language> ul classlist-unstyled ct-language-dropdown> li> a href# classlang-select data-langen> img srchttps://cdn.countryflags.com/thumbs/united-states-of-america/flag-400.png titleEnglish> /a> /li> li> a href# classlang-select data-langfr> img srchttps://cdn.countryflags.com/thumbs/france/flag-400.png titleFrench> /a> /li> li> a href# classlang-select data-langzh-CN> img srchttps://cdn.countryflags.com/thumbs/china/flag-400.png titleChinese(Simple)> /a> /li> li> a href# classlang-select data-langja> img srchttps://cdn.countryflags.com/thumbs/japan/flag-400.png titleJapanese> /a> /li> li> a href# classlang-select data-langko> img srchttps://cdn.countryflags.com/thumbs/south-korea/flag-400.png titleKorean> /a> /li> li> a href# classlang-select data-langru> img srchttps://cdn.countryflags.com/thumbs/russia/flag-400.png titleRussian> /a> /li> /ul>/span>script typetext/javascript>function googleTranslateElementInit() { new google.translate.TranslateElement({ pageLanguage: en, autoDisplay: false, layout: google.translate.TranslateElement.InlineLayout.VERTICAL }, google_translate_element); // Links to cross-origin destinations are unsafe var gll document.getElementsByClassName(goog-logo-link)0; if (gll) { gll.setAttribute(rel, noopener); } function restoreLang() { var iframe document.getElementsByClassName(goog-te-banner-frame)0; if (!iframe) return; var innerDoc iframe.contentDocument || iframe.contentWindow.document; var restore_el innerDoc.getElementsByTagName(button); for (var i 0; i restore_el.length; i++) { if (restore_eli.id.indexOf(restore) > 0) { restore_eli.click(); var close_el innerDoc.getElementsByClassName(goog-close-link); close_el0.click(); return; } } } function triggerHtmlEvent(element, eventName) { var event; if (document.createEvent) { event document.createEvent(HTMLEvents); event.initEvent(eventName, true, true); element.dispatchEvent(event); } else { event document.createEventObject(); event.eventType eventName; element.fireEvent(on + event.eventType, event); } } var googleCombo document.querySelector(select.goog-te-combo); var langSelect document.querySelector(.ct-language); langSelect.addEventListener(click, function(event) { if (!event.target) { return; } var selected document.querySelector(.ct-language .ct-language-selected); if (selected) { selected.classList.remove(ct-language-selected); } var target event.target; while (target && target ! langSelect ) { if (target.matches(.lang-select)) { break; } target target.parentElement; } if (target && target.matches(.lang-select)) { var lang target.getAttribute(data-lang); if (googleCombo.value lang) { restoreLang(); } else { target.parentElement.classList.add(ct-language-selected); googleCombo.value lang; triggerHtmlEvent(googleCombo, change); } } event.preventDefault(); });}/script>script typetext/javascript src//translate.google.com/translate_a/element.js?cbgoogleTranslateElementInit>/script>/span>/div> /nav>/div> /div>/header>script> function initHeader() { var lastScrollY getScrollPos().y; var documentElement document.documentElement; function storeScrollData() { var y getScrollPos().y;documentElement.setAttribute(data-header-transparent, );var scrollStatus ; if (y 0) { scrollStatus top; } else if ((window.innerHeight + y) > document.body.offsetHeight) { scrollStatus bottom; } else { var isScrollDown (y - lastScrollY > 0) ? true : false; scrollStatus isScrollDown ? down : up; } lastScrollY y; documentElement.setAttribute(data-scroll-status, scrollStatus); } window.addEventListener(scroll, function(e) { storeScrollData(); }); storeScrollData(); } document.addEventListener(DOMContentLoaded, initHeader);/script>section classpage-banner> div classpage-banner-img>div stylebackground-image: url(https://user-images.githubusercontent.com/95608811/291508517-1966009e-4c10-4089-a793-f3f778f31809.png?jwteyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDI5NzEwNzksIm5iZiI6MTcwMjk3MDc3OSwicGF0aCI6Ii85NTYwODgxMS8yOTE1MDg1MTctMTk2NjAwOWUtNGMxMC00MDg5LWE3OTMtZjNmNzc4ZjMxODA5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDA3MjYxOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxMjEyODNjYzk2MTZhMmNhYThkODljMjIyZmM3MWZhZGMzN2IwMTFhYzU4ZGE0NGRiNjc5MDdjOTMyMmEyODQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Hq2fhSXch_aAV4NoT8pePvfTB0i7-43n6HQ2Fd453_A)>/div> img classimg-placeholder srchttps://user-images.githubusercontent.com/95608811/291508517-1966009e-4c10-4089-a793-f3f778f31809.png?jwteyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDI5NzEwNzksIm5iZiI6MTcwMjk3MDc3OSwicGF0aCI6Ii85NTYwODgxMS8yOTE1MDg1MTctMTk2NjAwOWUtNGMxMC00MDg5LWE3OTMtZjNmNzc4ZjMxODA5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDA3MjYxOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxMjEyODNjYzk2MTZhMmNhYThkODljMjIyZmM3MWZhZGMzN2IwMTFhYzU4ZGE0NGRiNjc5MDdjOTMyMmEyODQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Hq2fhSXch_aAV4NoT8pePvfTB0i7-43n6HQ2Fd453_A>/div> div classwrapper> div classpage-banner-inner>div classpage-banner-default> h1 classpage-banner-heading> Inlee's Blog /h1> h2 classpage-banner-subheading> Spring, JPA, Nest.JS, Docker, LLM etc.. /h2> /div>/div> /div> /section>script> function hashLocate(hashValue) { hashValue hashValue.replace(/^.*#h-/, ); hashValue decodeURIComponent(hashValue); var element document.getElementById(hashValue); if (!element) { return; } var header document.querySelector(header.site-header); var headerRect header.getBoundingClientRect(); var headerTop Math.floor(headerRect.top); var headerHeight Math.floor(headerRect.height); var scrollPos getScrollPos(); var offsetY element.offsetTop - (headerTop + headerHeight + 20); if (offsetY scrollPos.y) { return; } if (headerTop 0 && offsetY > scrollPos.y) { offsetY + headerHeight + 2; } else if (headerTop 0 && offsetY scrollPos.y) { offsetY - headerHeight - 2; } smoothScrollTo(offsetY); } // The first event occurred window.addEventListener(load, function(event) { if (window.location.hash) { hashLocate(window.location.hash); } }); // The first event occurred window.addEventListener(click, function(event) { if (event.target.tagName.toLowerCase() a) { hashLocate(event.target.getAttribute(href)); } });/script>div classtheme-toggle> input typecheckbox idtheme-switch> label fortheme-switch> div classtoggle>/div> div classnames> p classlight>Light/p> p classdark>Dark/p> /div> /label>/div>script> (function() { var sw document.getElementById(theme-switch); var html document.getElementsByTagName(html)0; var nightModeOption (auto || auto).toLowerCase(); var storage nightModeOption manual ? localStorage : sessionStorage; var themeData loadThemeData(); function saveThemeData(data) { storage.setItem(theme, JSON.stringify(data)); } function loadThemeData() { var data storage.getItem(theme); try { data JSON.parse(data ? data : ); } catch(e) { data { nightShift: undefined, autoToggleAt: 0 }; saveThemeData(data); } return data; } function handleThemeToggle(nightShift) { themeData.nightShift nightShift; saveThemeData(themeData); html.dataset.theme nightShift ? dark : light; setTimeout(function() { sw.checked nightShift ? true : false; }, 50); } function autoThemeToggle() { // Next time point of theme toggle var now new Date(); var toggleAt new Date(); var hours now.getHours(); var nightShift hours > 19 || hours 7; if (nightShift) { if (hours > 7) { toggleAt.setDate(toggleAt.getDate() + 1); } toggleAt.setHours(7); } else { toggleAt.setHours(19); } toggleAt.setMinutes(0); toggleAt.setSeconds(0); toggleAt.setMilliseconds(0) var delay toggleAt.getTime() - now.getTime(); // auto toggle theme mode setTimeout(function() { handleThemeToggle(!nightShift); }, delay); return { nightShift: nightShift, toggleAt: toggleAt.getTime() }; } // Listen the theme toggle event sw.addEventListener(change, function(event) { handleThemeToggle(event.target.checked); }); if (nightModeOption auto) { var data autoThemeToggle(); // Toggle theme by local setting if (data.toggleAt > themeData.autoToggleAt) { themeData.autoToggleAt data.toggleAt; handleThemeToggle(data.nightShift); } else { handleThemeToggle(themeData.nightShift); } } else if (nightModeOption manual) { handleThemeToggle(themeData.nightShift); } else { var nightShift themeData.nightShift; if (nightShift undefined) { nightShift nightModeOption on; } handleThemeToggle(nightShift); } })();/script>div idclick-to-top classclick-to-top> i classfa fa-arrow-up>/i>/div>script> (function () { const clickToTop document.getElementById(click-to-top); window.addEventListener(scroll, () > { if (window.scrollY > 100) { clickToTop.classList.add(show) }else { clickToTop.classList.remove(show) } }); clickToTop.addEventListener(click, () > { window.smoothScrollTo(0); }); })();/script>main classpage-content aria-labelContent> div classwrapper> div classframework> section classmain> div classarticles> div classpagination> !-- Post list links --> ul classpost-list>li> h2 classpost-title> a classpost-link href/architecture/2024/02/10/msa.html> 마이크로서비스 아키텍처(MSA):현대적 서비스 개발의 새로운 패러다임 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Feb 10, 2024/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/architecture/2024/02/10/msa.html> p> 마이크로서비스 아키텍처(MSA): 비즈니스 민첩성을 위한 현대적 접근 방식마이크로서비스 아키텍처(MSA)는 애플리케이션을 더 작고, 독립적으로 배포 가능한 서비스로 분해함으로써, 비즈니스 기능을 중심으로 구성된 현대적인 서비스 개발 방식입니다. 이 접근 방식은 기업이 변화하는 시장 요구사항에 빠르게 대응하고, 높은 수준의 민첩성을 유지할 수 있도록 지원합니다.MSA의 장단점장점 민첩성 및 확장성 향상: 각 서비스를 독립적으로 개발하고 배포할 수 있어, 변화에 빠르게 대응하고 시스템을 확장하기 용이합니다. 장애 격리: 한 서비스의 실패가 전체 시스템에 영향을 미치지 않아 시스템의 전반적인 안정성... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#architecture>#architecture/a>/div> /li>li> h2 classpost-title> a classpost-link href/architecture/2024/02/09/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D.html> 모놀리식 아키텍처 - 단일 시스템의 장점과 한계 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Feb 09, 2024/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/architecture/2024/02/09/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D.html> p> 모놀리식 아키텍처: 전통적인 소프트웨어 개발의 근간모놀리식 아키텍처는 소프트웨어 개발의 가장 전통적인 방식 중 하나로, 애플리케이션의 모든 구성 요소가 하나의 대규모 코드 베이스 안에서 밀접하게 연결되어 있는 구조를 말합니다. 이러한 접근 방식은 그 단순함과 직관적인 구조로 인해 여전히 많은 프로젝트와 조직에서 선호되고 있습니다.핵심 특징 단일 프로세스 실행: 애플리케이션의 모든 기능이 하나의 실행 가능한 파일 내에서 작동하며, 단일 데이터베이스 엔드포인트를 사용합니다. 재배포의 필요성: 작은 수정이라도 전체 애플리케이션을 다시 배포해야 하는 경우가 많습니다. 구성의 유연성: 싱글 또는 멀티 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#architecture>#architecture/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/31/%EA%B0%92%ED%83%80%EC%9E%85.html> (JPA-7)값 타입과 값 타입 컬렉션 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 31, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/31/%EA%B0%92%ED%83%80%EC%9E%85.html> p> 들어가기전에데이터베이스와의 효율적인 상호작용은 모든 웹 애플리케이션의 핵심입니다. Spring JPA는 이러한 상호작용을 단순화하고 강화하는 다양한 기능을 제공합니다. 이 글에서는 그 중 ‘값타입(Value Types)’과 ‘값타입 컬렉션(Collection Value Types)’에 초점을 맞추어 설명하겠습니다.값 타입이란?값타입은 데이터베이스에서 실제 값을 나타내는 데이터 타입입니다. 이는 엔티티의 구성 요소이지만, 자체적으로는 식별자를 가지지 않습니다.값타입의 종류와 사용기본값 타입: 자바의 기본 타입(int, double 등), 래퍼 클래스(Integer, Long 등), String이 여... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/25/%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9%EA%B3%BC%EC%A6%89%EC%8B%9C%EB%A1%9C%EB%94%A9.html> (JPA-6)지연로딩과 즉시로딩 그리고 영속성 전이 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 25, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/spring/2023/12/25/%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9%EA%B3%BC%EC%A6%89%EC%8B%9C%EB%A1%9C%EB%94%A9.html> p> 지연 로딩(LAZY)과 즉시 로딩(EAGER)의 이해지연 로딩(LAZY)의 원리지연 로딩은 객체가 실제로 사용될 때까지 데이터베이스로부터 로드를 지연시키는 방식입니다. 예를 들어, 한 Member 객체가 Team 객체와 연관되어 있다고 할 때, 지연 로딩을 사용하면 Member 객체를 로드할 때 Team 객체는 로드되지 않습니다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @Column(name USERNAME) private String name; @ManyToOne(fetch ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/24/Proxy.html> (JPA-5)JPA의 프록시에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 24, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/24/Proxy.html> p> 프록시(Proxy)란 무엇인가?프록시의 기본 개념 프록시는 간단히 말해 ‘대리자’ 또는 ‘중개자’입니다. 실제 객체를 대신하여 다양한 작업을 수행합니다. 이는 마치 우리가 은행 업무를 처리하기 위해 대리인을 보내는 것과 유사합니다. 대리인은 우리를 대신하여 업무를 처리하며, 필요한 경우에만 우리에게 연락을 취합니다. 정의: 프록시는 실제 객체를 감싸는 래퍼(Wrapper) 역할을 합니다. 이를 통해 실제 객체에 대한 접근을 제어하거나, 추가적인 기능을 제공합니다. 목적: 주로 접근 제어, 지연 로딩, 로깅, 트랜잭션 처리 등을 위해 사용됩니다.em.find() vs em.getRefere... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/20/Superclass.html> (JPA-4)MappedSuperclass 공통매핑정보의 재사용 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 20, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/20/Superclass.html> p> MappedSuperclass: 공통 매핑 정보의 재사용개요MappedSuperclass는 JPA에서 상속 관계 매핑이 아닌 공통 매핑 정보의 재사용을 위해 사용됩니다. 이 방법은 데이터베이스 설계와 객체지향 설계의 불일치 문제를 해결하는 데 도움을 줍니다.주요 특징 공통 매핑 정보 제공: @MappedSuperclass로 지정된 클래스는 데이터베이스 테이블로 직접 매핑되지 않습니다.대신, 이 클래스에 정의된 매핑 정보(필드, 관계, 메서드 등)는 상속받는 자식 클래스에게 상속됩니다. 엔티티가 아님: @MappedSuperclass로 지정된 클래스는 엔티티가 아닙니다.... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/15/%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84.html> (JPA-3)고급매핑 상속관계매핑 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 15, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/spring/2023/12/15/%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84.html> p> 들어가기 전에이전글 연관관계 매핑 포스트를 보고 오면 좋습니다.고급 매핑: 상속관계 매핑객체지향 프로그래밍에서 상속은 중요한 개념입니다. 이를 데이터베이스와 연동할 때, 어떻게 효과적으로 구현할 수 있을까요? JPA(Java Persistence API)를 사용하면, 슈퍼타입과 서브타입 관계를 물리 모델로 효율적으로 변환할 수 있습니다. 이를 위한 세 가지 전략이 있습니다:각각의 테이블로 변환 (조인 전략) 통합 테이블로 변환 (단일 테이블 전략) 서브타입 테이블로 전환 (구현 클래스마다 테이블 전략) 주요 어노테이션 이러한 전략을 구현하기 위해 JPA에서는 다음과 같은 어노... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/09/%EC%97%B0%EA%B4%80%EA%B4%B8%EA%B3%84%EB%A7%A4%ED%95%91.html> (JPA-2)JPA 연관관계 매핑과 연관관계의 주인 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 09, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 5 mins/span> /div> a classpost-excerpt href/spring/2023/12/09/%EC%97%B0%EA%B4%80%EA%B4%B8%EA%B3%84%EB%A7%A4%ED%95%91.html> p> 들어가기 전에이전글 영속성 컨텍스트 포스트를 보고 오면 좋습니다.연관관계 매핑 기초ORM을 사용하는 데 있어서 가장 중요한 개념 중 하나는 객체와 테이블의 차이를 이해하는 것이라고 생각한다. 사실 DB만 잘 배우는 것도 쉽지 않은데, 안타깝게도 ORM을 사용하려면 기본적인 DB 지식이 있어야 한다. 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리주인이 필요1. 단방향 연관관계 (N:1)예를 들어, 주문(Order)이 고... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/02/%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8.html> (JPA-1)JPA와 영속성 컨텍스트 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 02, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 8 mins/span> /div> a classpost-excerpt href/spring/2023/12/02/%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8.html> p> 들어가기 전에사실 스프링 공부를 여러번 시도 했었다. HTTP, WAS, DB 등 백앤드에 관련된 지식이 없을 때 무작정 인프런에서 유명하다는 강사님의 인강을 보면서 따라 쳤는데강의 내용의 반의 반도 습득하지 못했었다. 그렇게 두 번, 세 번 전체강의를 돌려보았고 결국 완벽한 이해는 못한 채 다른 프로젝트들을 시작했다. Flask, Nest.js 등의 다른 프레임워크를 사용하다가 현업에서 가장 많이 쓰고 강력한 무기인 Spring을 다 씹어먹지 못한 게 너무 한이되어 다시 처음부터 개념을 씹어먹을거라는 각오로 블로그 글을 작성하면서 다시 공부하기로 했다. 그래서, Code-based인 다른 포스트... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/01/DI%EC%99%80IOC.html> Spring DI와 IoC 컨테이너에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 01, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/01/DI%EC%99%80IOC.html> p> DI(의존관계 주입) / 스프링 컨테이너DI(의존관계 주입)는 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달하는 과정을 의미합니다. 이를 통해 클라이언트와 서버의 실제 의존관계가 연결됩니다.IoC 컨테이너, DI 컨테이너IoC(Inversion of Control) 컨테이너는 객체의 생성과 관리를 담당합니다. AppConfig와 같은 클래스가 이 역할을 수행합니다.@Bean 어노테이션@Bean 어노테이션은 스프링 컨테이너에 의해 관리될 객체를 선언할 때 사용됩니다. 예를 들어:@Configurationpublic class AppConfig { @Bea... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/ai/2023/04/05/perceptron.html> 인공신경망과 퍼셉트론 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Apr 05, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/ai/2023/04/05/perceptron.html> p> 퍼셉트론과 신경망퍼셉트론은 신경망의 기본 구성요소입니다. 신경망(Neural Net)의 기본 구조를 보면 보통 아래와 같이 그립니다.이 중 파란색으로 동그라미 친 부분, 신경망의 구성요소를 퍼셉트론이라고 합니다. 다른 말로는 Dense(밀집) 혹은 노드(Node) 라고도 부릅니다.퍼셉트론의 구성요소위 그림의 신경망에서 하나의 퍼셉트론을 확대해서 보면,그림과 같이 퍼셉트론은 입력(inputs), 가중치(Connection Weight), 바이어스(bias), 합 연산(Sum), 활성 함수(Activation Function)로 구성되어 있습니다. 오느날 인공신경망에서 이용하는 퍼... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#ai>#ai/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring,/java/2022/10/10/SOLID.html> SOLID - 객체 지향 설계의 5가지 원칙 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Oct 10, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring,/java/2022/10/10/SOLID.html> p> SOLID클린코드로 유명한 로버트 마틴의 객체 지향 설계의 5가지 원칙SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져있다.SRP : 단일 책임 원칙 (single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2022/09/20/sprig%EC%8B%9C%EC%9E%91.html> JAVA Spring 시작하기 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 20, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2022/09/20/sprig%EC%8B%9C%EC%9E%91.html> p> Spring 라이브러리Spring Boot Library spring-boot-starter-web spring-boot-starter-tomcat : 톰캣(웹서버) spring-webmvc : 스프링 웹 MVC spring-boot-starter-thymeleaf : 타입리프 템플릿 엔진(View) spring-boot-starter(공통) : 스프링부트 + 스프링코어 + 로깅 spring-boot spring-core... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/09/19/Makefile.html> C언어 Makefile 이해하기 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 19, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/c/2022/09/19/Makefile.html> p> Makefile 왜 쓰는데?간단한 소스코드 파일 한두개라면 몰라도 컴파일 해야할 코드 갯수가 굉장히 많아지면 gcc 방식으로 하나하나 컴파일 하는것은 시간도 오래걸리고 굉장히 귀찮은 일이된다. 그래서 반복적인 작업을 피하기 위해서 쓰는것이 make 유틸리티이다.make / Makefilemake는 유틸리티 이름이다. make 유틸리티는 Makefile이라는 파일의 내용을 읽어서 목표 파일(target)을 만듭니다.컴파일과정 c파일에서 object 파일 생성하기 ex) gcc -c -o ft_strlen.o ft_strlen.c -c 옵션은 해당 c파일을 .o(오브젝트)파일... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#c>#c/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/09/18/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EC%99%80-id.html> C언어 write 함수 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 18, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/c/2022/09/18/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EC%99%80-id.html> p> unistd.h 가 뭔데?POSIX 운영체제 API에 대한 엑세스를 제공하는 헤더파일이다. 보통 Unix 에 쓰이는 표준 심볼들과 상수들을 정의해 놓은 것이기 때문에 unistd.h에 포함되어 있는 내용은 대부분 유닉스환경에서만 쓸 수 있다.write 함수를 어디에 쓰는건데?#include <unistd.h>ssize_t write(int fd, void* buf, size_t nbytes);보통 오픈한 파일에 데이터를 쓸 때 사용하는 함수이다. return value : 성공 시 기록된 바이트수, 에러시 -1을 return 한다.그런데,해당 함수를 에 있는 printf()... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#c>#c/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/08/12/c%EC%96%B8%EC%96%B4%ED%8F%AC%EC%9D%B8%ED%84%B0.html> C언어 포인터와 동적메모리 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Aug 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 4 mins/span> /div> a classpost-excerpt href/c/2022/08/12/c%EC%96%B8%EC%96%B4%ED%8F%AC%EC%9D%B8%ED%84%B0.html> p> 메모리 영역 코드 영역 코드 영역은 이름 처럼 작성한 코드를 저장하는 영역입니다. 데이터 영역 데이터 영역은 전역 변수와 정적 변수를 저장하는 영역입니다. 전역 변수는 프로그램이 시작되면서 초기화됩니다. 그러므로 데이터 영역은 프로그램 시작시에 이미 메모리가 확보되어 크기가 변하지 않음을 알 수 있습니다. 힙 영역힙영역은 동적 메모리를 할당하는 영역입니다. C언어로 코드를 작성할 때 직접 메모리를 할당할 때가 있습니다. 이 때 메모리를 할당하는 영역이 바로 힙 영역입니다. 힙에 저장된 메모리는 함수호출이 종료되어도 사라지지 않기 때문에, ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#동적할당>#동적할당/a>a classpost-tag href/tags.html#메모리>#메모리/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/permission.html> 권한의 이해와 설정 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/system/2022/07/13/permission.html> p> 권한이란?리눅스의 모든 파일과 디렉토리는 권한(permission)을 가지고 있다. 리눅스의 파일시스템 상에 권한에 대한 정보를 저장하는 부분이 있다. 퍼미션들은 시스템 상에 존재하는 파일들에 대한 읽기,쓰기,실행에 대한 접근 여부를 결정한다. ls -l 명령어로 확인 가능 (첫번째 필드, -rwxr-wr–) 이러한 퍼미션은 다중 사용자 환경을 제공하는 리눅스 환경에서는 가장 기초적인 접근 통제 방법권한 설정 방법 chmod 권한 파일 또는 디렉토리 이름 권한 : 권한을 입력할 때는 심볼릭 모드와 옥텟(8진수) 모드 2가지 방식을 이용하여... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/hardlink.html> 하드링크와 심볼릭 링크 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/system/2022/07/13/hardlink.html> p> 링크란 무엇인가? 특정 파일 또는 디렉토리에 접근을 쉽게 할 수 있도록 하는 방법 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것하드링크 특정 파일 또는 디렉토리에 접근을 쉽게 할 수 있도록 하는 방법 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것심볼릭링크 윈도우의 바로가기 개념과 슷하며 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템 상의 특정 파일을 가리키는 것링크 생성 명령어 ln 옵션 원본 링크 옵션을 지정하지 않고 링크 파일을 생성하면 하드... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/grep.html> 파일 및 디렉토리 검색 - grep/find /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/system/2022/07/13/grep.html> p> 파일 내용에서 검색 grep 파일 내용에서 특정 내용만 찾을때 사용 grep 옵션 패턴 파일이름 옵션 : 좀 더 디테일한 조건으로 찾을 때 사용 패턴 : 찾고 싶은 내용을 입력, 일치하는 내용을 출력. 정규표현식 사용 가능 파일 이름 : grep 명령어로 특정 내용을 검색할 파일을 지정한다. ex ) grep -i root/ect/id옵션-i : 대소문자 무시 (word와 WoRD 를 구분하지 않는다.) -n : 줄 번호 표시 (line 넘버를 표시한다.) -v : 패턴을 제외한 내용만 출력 -w : 단어 단위로 검색 (ro 를 검색하면 root ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/java/2022/06/18/JavaEvent.html> Java GUI and EventListener /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 18, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 17 mins/span> /div> a classpost-excerpt href/java/2022/06/18/JavaEvent.html> p> `` 먼저 모든 import문은 eclipse 자동생성으로 만드는걸 default로 한다.즉, 코드에 import문은 넣지 않으므로 자동생성 해서 쓰길 권장한다.입출력 스트림 파일 객체 생성 File f new File(c:\\windows\\system.ini); * 파일의 경로명 String filename f.getName(); // system.iniString path f.getPath(); // c:\\windows\\system.iniString parent f.getParent(); // c:\\windows... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#gui>#gui/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/13/%EA%B5%AC%EC%A1%B0%EC%B2%B4forC.html> 구조체 for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/13/%EA%B5%AC%EC%A1%B0%EC%B2%B4forC.html> p> 구조체를 이용한 파일처리프로그래밍에 필요한 데이터가 파일로 제공되는 경우 각 파일에는 필요한 필드로 구성된레코드를 저장하는 경우가 많다. 이렇게 저장된 파일의 데이터를 프로그램에서 사용하려면구조체를 활용해야한다. 구조체는 서로 형이 다를 수 있는 여러 변수들의 모임을 하나의 이름으로 가지고 있는 자료구조이다. 구조체는 그 목적에 따라 필요한 구성요소를 정하여 다음과 같이 선언할 수 있다. struct employee { char name20; long id; int depend; float salary;};struct employee e1; strcpy(e1.name, “Ho... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/13/StackForC.html> Stack(스택)for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/13/StackForC.html> p> 스택의 정의 한쪽 끝(top)에서 삽입과 삭제가 일어나는 선형리스트LIFO(Last In First Out) 구조 선형리스트의 긑부분에서만 자료의 입력과 출력이 가능하도록 제한된 자료구조 마지막 삽입 (Last-In)한 원소는 맨 위에 쌓여 있다가 가장먼저 삭제(First-Out) 된다. 후입선출 구조 (LIFO) 스택을 운영하기 위하여 끝 부분(top)에 대한 정보가 필요함. 위 그림처럼 끝 부분(top) 에서만 삽입과 삭제가 일어남.스택의 연산 현재 스택의 상태를 나타내는 변수 top, 데이터를 담을 배열 stack이 필요하다.(1... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/12/%EB%A7%88%EB%B0%A9%EC%A7%84forC.html> MagicSquare(마방진)for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/12/%EB%A7%88%EB%B0%A9%EC%A7%84forC.html> p> 마방진우선 마방진에 대한 개념은 가로,세로,대각선의 합이 같아지도록 정사각형 모양으로 배열한 행렬이다.마방진 만드는 규칙1) 첫번째 행의 중앙에 1을 배열한다. 2) 왼쪽 대각선으로 올라가면서 빈자리에 1씩 큰 수를 배열한다. 이때 행렬의 밖으로 벗어나면 그 방향의 반대편에서 계속한다. 3) 만약 이동해서 채워야하는 자리에 이미 숫자가 배열되어 있다면, 정해진 위치 바로 아래에 숫자를 배열한다. 5x5 마방진 예시규칙을 프로그램으로 짜기 입력 : 0으로 초기화된 n * n의 2차원 배열 tablenn 출력 : n * n의 magic square행을 움직이는 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/12/SQL%EB%AC%B8%EC%A0%9C.html> SQL문제 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/db/2022/06/12/SQL%EB%AC%B8%EC%A0%9C.html> p> SQL 문법 순서SELECT(마지막) 무엇을 불러올건지 FROM (1) 어디서 WHERE (2) 조건문 GROUP(3) 그룹별 HAVING(4) 가져온것 중에서 조건문 ORDER BY(5) 정렬순서로 작성하면 된다.SQL 문제1) 급여가 400 이상인 사원 이름과 그 사원이 속한 부서이름을 검색하라SELECT ename, dnameFROM dept, empWHERE dept.deptid emp.deptidAND salary > 400;2) ‘영업부’ 와’구매부’ 사원의 급여 합계를 검색하라SELECT SUM(salary)FROM... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/12/SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95.html> SQL기본문법 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/db/2022/06/12/SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95.html> p> SELECT 기능 내가 원하는 정보 가져오기1) 테이블 전체 정보 보기SELECT * FROM Customers; *(asterisk)는 테이블의 모든 컬럼을 뜻한다.2) 원하는 컬럼만 보기SELECT CustomerName FROM Customers;SELECT CustomerName, ContactName, CountryFROM Customers;3) 원하는 조건의 row(행)만 걸러서 보기 WHERE 구문 뒤에 조건을 붙여 원하는 데이터만 가져올 수 있습니다.SELECT * FROM OrdersWHERE EmployeeID 3;SELECT... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/11/DB%EC%A0%95%EA%B7%9C%ED%99%94.html> DB 정규화 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 11, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/db/2022/06/11/DB%EC%A0%95%EA%B7%9C%ED%99%94.html> p> 정규화 ? DB시스템을 만지다보면 엄청나게 많은 테이블들이 얽혀있어 하나의 데이터를 수정했을때 여러문제가 생길 수 있는데,정규화를 통해서 정해진 규칙대로 테이블을 쪼개게 되면, 문제점들을 사전에 해소할 수 있음. 가장 대표적인 문제점들로는 삭제이상(delete), 삽입이상(insert), 수정이상(update) 삭제이상은 지정된 테이블에서 데이터를 삭제하려고 하는데, 연결된 다른테이블에서도 데이터가 삭제되는 것이다. 삽입이상은 지정된 테이블에 데이터를 삽입하려고 하는데, 연결된 다른테이블에서도 데이터가 삽입되는 것이다. 수정이상은 원하는 데이터를 모두 수정하지 못... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/06/09/%EB%AC%B8%EC%84%9C%ED%8E%B8%EC%A7%91%EA%B8%B0vi.html> 문서편집기 vi /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 09, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/system/2022/06/09/%EB%AC%B8%EC%84%9C%ED%8E%B8%EC%A7%91%EA%B8%B0vi.html> p> vi 편집기 vi 편집기는 일반적으로 모드가 나누어져 있기 때문에, 따로 공부를 하지 않으면 사용할 때 어려움이 있다. 명령모드 : 모드변경,복사,이동등의 작업 편집모드 : 문서작성 및 편집 Last Line 모드 : 치환, 저장 및 종료 수행 명령모드에서 i,o,a 를 입력하면 편집모드로 이동된다 i 는 커서의 앞부분 부터, a 는 커서의 다음부분 부터, o를 입력하면 커서의 아래라인부터 입력이 된다 명령모드에서 :를 입력하면 Last Line 모드로 넘어가게 된다 Last Line 모드에서 :wq 등의 명령어로 모드에서 나올 수 있... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#vi>#vi/a>a classpost-tag href/tags.html#vim>#vim/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/06/07/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EB%B3%B8%ED%99%98%EA%B2%BD.html> 리눅스 기본구조와 명령어 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 07, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/system/2022/06/07/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EB%B3%B8%ED%99%98%EA%B2%BD.html> p> 리눅스 기본 환경 명령줄 인터페이스 텍스트 터미널을 통해 사용자의 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다. 명령어 구조 명령어 : 시스템에서 특정 작업을 하기 위해 실행파일, 프로그램 옵션 : 명령어를 어떻게 실행할 것인지 지정일반적으로 대시(-) 문자 뒤에 옵션을 지정 아규먼트(Argument) :명령어에 의해서 영향을 받는 파일 or 디렉토리 등 특정 대상 ex) ls -al, ifconfig -a, netstat ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/git/2022/05/31/Git%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> Git과 Github /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 31, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/git/2022/05/31/Git%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 깃 : 버전관리시스템 VCS: version control system깃허브 버전관리 깃의 원격 저장소 웹 호스팅 서비스 소프트웨어 개발 활용 소셜 코딩 플랫폼 전 세계 개발자를 위한 프로젝트 수행 협업 서비스 프로젝트 개발 및 운영 서비스깃허브를 쓰는 이유 규모에 상관없이 모든 회사와 조직에서 원하는 공개 및 비공개 프로젝트에 필요한 중요 DevOps 기능을 제공하기 때문 계획 수립 기능, 버그 수정, 변경 사항 관련 협업 등을 진행할 때 GitHub를 사용하면 전 세계 소프트웨어 개발자와 함께 작업 가능 그리고 더 나은 제품을 만들 가능성 향상 Gi... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#git>#git/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/29/Javascrpt%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> 자바스크립트에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 29, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/web/2022/05/29/Javascrpt%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.자바스크립트의 특징자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다.(Vue,React,Angular 등도 javascript기반으로 만들어진 프레임워크이다.) ~python기반의 pyscript도 javascript 기반이다.~자바스크립트는 기존의 프로그래밍 언어에서 많은 영향을 받았다.기본 문법은 C, Java와 유사하고 Self에서는 프로토타입 기반 상속을, Scheme에서는 일급 함수의 개념을 차용했다.~ 그래서 매우 근본이 없다.. 필요해서 막 만들었다는게 학계의 정설이다 ~ 자바스크립트는 개발자가 별도의 컴파일 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#javascript>#javascript/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/28/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> 프로그래밍이란? for JS /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 28, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/28/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.본격적으로 JS(자바스크립트)를 설명하기전에, 프로그래밍이란 ? 앞서 설명했던 html과 css와는 다르게 JS(자바스크립트를 편의상 JS라고 하겠다.) 는 프로그래밍언어이기 때문에 프로그래밍에 대해서 간략하게 설명하고 넘어가겠다.프로그래밍 이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다. 이를 위해서 무엇을 원하고 어떤식으로 컴퓨터에게 명령을 전달하는 지를 알아야한다. 다시 말해, 프로그래밍에 앞서 문제(요구사항)를 명확히 이해한 후 적절한 문제 해결 방안의 정의가 필요하다.컴퓨터는 0과 1밖에 알지못하기 때문에 우리가 원하는 요구사항을 컴퓨터가 알아들을 수 있게 정확하고 상세하게 코... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#javascript>#javascript/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/26/%EC%8B%9C%EB%A7%A8%ED%8B%B1%EC%9A%94%EC%86%8C%EC%99%80-%EC%9B%B9.html> 시맨틱 웹(Semantic Web) /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 26, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/26/%EC%8B%9C%EB%A7%A8%ED%8B%B1%EC%9A%94%EC%86%8C%EC%99%80-%EC%9B%B9.html> p> 시맨틱 웹이 뭔데? 시멘틱 웹에 관한부분은 PoiemaWeb (웹프로그래밍튜토리얼) 사이트 참조2022년 퍼블리싱 되고 있는 웹사이트의 갯수는 약20억개, 인터넷사용자수는 53만명이다. 출처 : https://www.internetlivestats.com/대부분의 인터넷 사용자는 원하는 정보를 취득하기 위해 Google이나 Naver와 같은 검색사이트를 이용한다. 웹사이트는 검색엔진에 의한 노출이 매우 중요하다. 당연한 것이 검색엔진에 노출되지 않는 웹사이트에는 접속하는 이도 없기 때문이다. 검색엔진은 이 시대의 가장 강력한 권력 중의 하나라고 말할 수도 있겠다.SEO(검색엔진 최적화... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#html>#html/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/25/CSS%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> CSS에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 25, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/web/2022/05/25/CSS%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> CSS가 뭔데?CSS(Cascading Style Sheets)는 HTML이나 XML과 같은 구조화 된 문서(Document)를 화면, 종이 등에 어떻게 렌더링할 것인지를 정의하기 위한 언어이다. 즉, CSS는 HTML의 각 요소(Element)의 style(design, layout etc)을 정의하여 화면(Screen) 등에 어떻게 렌더링하면 되는지 브라우저에게 설명하기 위한 언어이다. 그냥 웹페이지에서 HTML 로 만들어둔 웹 구조 위에 스타일을 입히는 작업이다.프론트엔드 개발자를 희망하면서, CSS는 배우기를 꺼려하는 초보개발자들이 종종 보인다.CSS는 HTML이라는 구조에 단순히 색을 입히... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#css>#css/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/24/HTML5%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> HTML에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 24, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/24/HTML5%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.HTML 이 뭔데?HTML (HyperText Markup Language)은 웹페이지를 기술하기 위한 마크업 언어이다. 조금 더 자세히 말하면 웹페이지의 내용(content)과 구조(structure)을 담당하는 언어로써 HTML 태그를 통해 정보를 구조화하는 것이다.좀 더 직관적으로 말하자면, 처음 웹개발을 시작하는 이들이라면 HTML CSS Javascript를 우선적으로 공부하게 되는데, HTML은 웹페이지의 내용과 구조를 담당하고, CSS는 웹페이지의 디자인과 스타일을 담당하고, Javascript는 웹페이지에서의 동작(행동)들을 프로그래밍 하는 언어라고 생각하면 당장 공부를 시작... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#html>#html/a>/div> /li>/ul> !-- Pagination links -->/div>/div> /section> section classsidebar stylemargin-left: 15px;> !-- Get sidebar items -->div classcommon-list> ul> li> a href/index.html> Allspan>34/span> /a> /li> li> a href/categories.html#h-DB> DB span>3/span> /a> /li> li> a href/categories.html#h-System> System span>5/span> /a> /li> li> a href/categories.html#h-ai> ai span>1/span> /a> /li> li> a href/categories.html#h-algorithm> algorithm span>3/span> /a> /li> li> a href/categories.html#h-architecture> architecture span>2/span> /a> /li> li> a href/categories.html#h-c> c span>3/span> /a> /li> li> a href/categories.html#h-git> git span>1/span> /a> /li> li> a href/categories.html#h-java> java span>2/span> /a> /li> li> a href/categories.html#h-spring> spring span>9/span> /a> /li> li> a href/categories.html#h-spring,> spring, span>1/span> /a> /li> li> a href/categories.html#h-web> web span>5/span> /a> /li> /ul>/div>/section>/div> /div> /main>footer classsite-footer h-card> data classu-url href/>/data> div classwrapper> div classsite-footer-inner>div>Copyright 2022. inlee All pictures can be copied without permission. 2022-2024 inlee/div> div>Powered by a titleJekyll is a simple, blog-aware, static site generator. hrefhttps://jekyllrb.com/>Jekyll/a> & a titleYat, yet another theme. hrefhttps://github.com/jeffreytse/jekyll-theme-yat>Yat Theme/a>./div> div classfooter-col rss-subscribe>Subscribe a href/feed.xml>via RSS/a>/div> /div> /div>/footer>/body>/html>
Port 443
HTTP/1.1 200 OKDate: Wed, 22 Jan 2025 02:02:45 GMTContent-Type: text/html; charsetutf-8Transfer-Encoding: chunkedConnection: keep-alivelast-modified: Mon, 18 Mar 2024 02:27:59 GMTaccess-control-allow-origin: *expires: Wed, 22 Jan 2025 02:12:45 GMTCache-Control: max-age600x-proxy-cache: MISSx-github-request-id: 6BB7:30CE9B:773A40:7A0BD2:679051C5Age: 0via: 1.1 varnishx-served-by: cache-pao-kpao1770046-PAOx-cache: MISSx-cache-hits: 0x-timer: S1737511365.200133,VS0,VE127vary: Accept-Encodingx-fastly-request-id: 3b7f85657012d532bcb841445f9fb997dfeec00bcf-cache-status: DYNAMICReport-To: {endpoints:{url:https:\/\/a.nel.cloudflare.com\/report\/v4?soouRzHRakrK3YgMv5wr2Wy3FaWiw9JbZKigkVPiU73FUnz5l7NUPU6VvllRsaZB4hN9DfRQlmamNMYdkZNi3bxaGE4qYajTiRsYBTSZzHsCTAC6%2BGFGjQz08gEHo0Soy},group:cf-nel,max_age:604800}NEL: {success_fraction:0,report_to:cf-nel,max_age:604800}Server: cloudflareCF-RAY: 905bf6b0093875b6-SEAalt-svc: h3:443; ma86400server-timing: cfL4;desc?protoTCP&rtt10886&min_rtt10653&rtt_var3124&sent5&recv6&lost0&retrans0&sent_bytes2839&recv_bytes724&delivery_rate271848&cwnd252&unsent_bytes0&cid60e2cd18eec1f136&ts247&x0 !DOCTYPE html>html langen>head> meta charsetutf-8> meta http-equivX-UA-Compatible contentIEedge> meta nameviewport contentwidthdevice-width, initial-scale1> meta namegoogle-translate-customization content108d9124921d80c3-80e20d618ff053c8-g4f02ec6f3dba68b7-c>!-- Begin Jekyll SEO tag v2.8.0 -->title>Inlee’s Blog | All of Code/title>meta namegenerator contentJekyll v3.9.5 />meta propertyog:title contentInlee’s Blog />meta nameauthor contentinlee />meta propertyog:locale contenten_US />meta namedescription contentAll of Code />meta propertyog:description contentAll of Code />link relcanonical hrefhttps://blog.inlee.kr/ />meta propertyog:url contenthttps://blog.inlee.kr/ />meta propertyog:site_name contentInlee’s Blog />meta propertyog:type contentwebsite />meta nametwitter:card contentsummary />meta propertytwitter:title contentInlee’s Blog />meta namegoogle-site-verification contentp512jSguWG2fS0RhsEYL5oBEW8BDHDRWOpY96CvJmHU />script typeapplication/ld+json>{@context:https://schema.org,@type:WebSite,author:{@type:Person,name:inlee},description:All of Code,headline:Inlee’s Blog,name:Inlee’s Blog,url:https://blog.inlee.kr/}/script>!-- End Jekyll SEO tag -->link relshortcut icon hreffavicon.png> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css> link relstylesheet hrefhttps://cdn.jsdelivr.net/npm/typeface-noto-sans@0.0.72/index.min.css> link relstylesheet href/assets/css/main.css> script src/assets/js/main.js>/script>link typeapplication/atom+xml relalternate hrefhttps://blog.inlee.kr/feed.xml titleInlees Blog />script> function initGoogleAnalytics() { var doNotTrack (window.doNotTrack 1 || navigator.doNotTrack 1 || navigator.doNotTrack yes || navigator.msDoNotTrack 1); var enableDNT true true; if (!enableDNT || !doNotTrack) { (function(i,s,o,g,r,a,m){iGoogleAnalyticsObjectr;irir||function(){ (ir.qir.q||).push(arguments)},ir.l1*new Date();as.createElement(o), ms.getElementsByTagName(o)0;a.async1;a.srcg;m.parentNode.insertBefore(a,m) })(window,document,script,https://www.google-analytics.com/analytics.js,ga); ga(create, G-BS686XJ0FL, auto); ga(send, pageview); } } window.addEventListener(load, initGoogleAnalytics);/script>link relstylesheet href//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/styles/default.min.css>script src//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/highlight.min.js>/script>!-- and its easy to individually load additional languages -->script charsetUTF-8 srchttps://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.1.1/languages/go.min.js>/script>script>// Init highlight jsdocument.addEventListener(DOMContentLoaded, function(event) { var els document.querySelectorAll(pre code) function addLangData(block) { var outer block.parentElement.parentElement.parentElement; var lang block.getAttribute(data-lang); for (var i 0; i outer.classList.length; i++) { var cls outer.classListi; if (cls.startsWith(language-)) { lang cls; break; } } if (!lang) { cls block.getAttribute(class); lang cls ? cls.replace(hljs , ) : ; } if (lang.startsWith(language-)) { lang lang.substr(9); } block.setAttribute(class, hljs + lang); block.parentNode.setAttribute(data-lang, lang); } function addBadge(block) { var enabled (true || true).toLowerCase(); if (enabled true) { var pre block.parentElement; pre.classList.add(badge); } } function handle(block) { addLangData(block); addBadge(block) hljs.highlightBlock(block); } for (var i 0; i els.length; i++) { var el elsi; handle(el); }});/script>style> /* code language badge */ pre.badge::before { content: attr(data-lang); color: #fff; background-color: #ff4e00; padding: 0 .5em; border-radius: 0 2px; text-transform: uppercase; text-align: center; min-width: 32px; display: inline-block; position: absolute; right: 0; } /* fix wrong badge display for firefox browser */ code > table pre::before { display: none; }/style>/head>body>header classsite-header site-header-transparent rolebanner> div classwrapper> div classsite-header-inner>span classsite-brand>a classsite-brand-inner relauthor href/> img classsite-favicon titleInlee's Blog srcfavicon.png onerrorthis.style.displaynone> Inlee's Blog/a>/span>nav classsite-nav> input typecheckbox idnav-trigger classnav-trigger /> label fornav-trigger> span classmenu-icon> svg viewBox0 0 18 15 width18px height15px> path dM18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.032C17.335,0,18,0.665,18,1.484L18,1.484z M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.032C17.335,6.031,18,6.696,18,7.516L18,7.516z M18,13.516C18,14.335,17.335,15,16.516,15H1.484 C0.665,15,0,14.335,0,13.516l0,0c0-0.82,0.665-1.483,1.484-1.483h15.032C17.335,12.031,18,12.695,18,13.516L18,13.516z/> /svg> /span> /label> div classtrigger>a classpage-link href/about.html>ABOUT/a>a classpage-link href/archives.html>ARCHIVES/a>a classpage-link href/categories.html>CATEGORIES/a>a classpage-link href/>HOME/a>a classpage-link href/tags.html>TAGS/a>span classpage-link>div idgoogle_translate_element styledisplay: none;>/div>span classct-language> ul classlist-unstyled ct-language-dropdown> li> a href# classlang-select data-langen> img srchttps://cdn.countryflags.com/thumbs/united-states-of-america/flag-400.png titleEnglish> /a> /li> li> a href# classlang-select data-langfr> img srchttps://cdn.countryflags.com/thumbs/france/flag-400.png titleFrench> /a> /li> li> a href# classlang-select data-langzh-CN> img srchttps://cdn.countryflags.com/thumbs/china/flag-400.png titleChinese(Simple)> /a> /li> li> a href# classlang-select data-langja> img srchttps://cdn.countryflags.com/thumbs/japan/flag-400.png titleJapanese> /a> /li> li> a href# classlang-select data-langko> img srchttps://cdn.countryflags.com/thumbs/south-korea/flag-400.png titleKorean> /a> /li> li> a href# classlang-select data-langru> img srchttps://cdn.countryflags.com/thumbs/russia/flag-400.png titleRussian> /a> /li> /ul>/span>script typetext/javascript>function googleTranslateElementInit() { new google.translate.TranslateElement({ pageLanguage: en, autoDisplay: false, layout: google.translate.TranslateElement.InlineLayout.VERTICAL }, google_translate_element); // Links to cross-origin destinations are unsafe var gll document.getElementsByClassName(goog-logo-link)0; if (gll) { gll.setAttribute(rel, noopener); } function restoreLang() { var iframe document.getElementsByClassName(goog-te-banner-frame)0; if (!iframe) return; var innerDoc iframe.contentDocument || iframe.contentWindow.document; var restore_el innerDoc.getElementsByTagName(button); for (var i 0; i restore_el.length; i++) { if (restore_eli.id.indexOf(restore) > 0) { restore_eli.click(); var close_el innerDoc.getElementsByClassName(goog-close-link); close_el0.click(); return; } } } function triggerHtmlEvent(element, eventName) { var event; if (document.createEvent) { event document.createEvent(HTMLEvents); event.initEvent(eventName, true, true); element.dispatchEvent(event); } else { event document.createEventObject(); event.eventType eventName; element.fireEvent(on + event.eventType, event); } } var googleCombo document.querySelector(select.goog-te-combo); var langSelect document.querySelector(.ct-language); langSelect.addEventListener(click, function(event) { if (!event.target) { return; } var selected document.querySelector(.ct-language .ct-language-selected); if (selected) { selected.classList.remove(ct-language-selected); } var target event.target; while (target && target ! langSelect ) { if (target.matches(.lang-select)) { break; } target target.parentElement; } if (target && target.matches(.lang-select)) { var lang target.getAttribute(data-lang); if (googleCombo.value lang) { restoreLang(); } else { target.parentElement.classList.add(ct-language-selected); googleCombo.value lang; triggerHtmlEvent(googleCombo, change); } } event.preventDefault(); });}/script>script typetext/javascript src//translate.google.com/translate_a/element.js?cbgoogleTranslateElementInit>/script>/span>/div> /nav>/div> /div>/header>script> function initHeader() { var lastScrollY getScrollPos().y; var documentElement document.documentElement; function storeScrollData() { var y getScrollPos().y;documentElement.setAttribute(data-header-transparent, );var scrollStatus ; if (y 0) { scrollStatus top; } else if ((window.innerHeight + y) > document.body.offsetHeight) { scrollStatus bottom; } else { var isScrollDown (y - lastScrollY > 0) ? true : false; scrollStatus isScrollDown ? down : up; } lastScrollY y; documentElement.setAttribute(data-scroll-status, scrollStatus); } window.addEventListener(scroll, function(e) { storeScrollData(); }); storeScrollData(); } document.addEventListener(DOMContentLoaded, initHeader);/script>section classpage-banner> div classpage-banner-img>div stylebackground-image: url(https://user-images.githubusercontent.com/95608811/291508517-1966009e-4c10-4089-a793-f3f778f31809.png?jwteyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDI5NzEwNzksIm5iZiI6MTcwMjk3MDc3OSwicGF0aCI6Ii85NTYwODgxMS8yOTE1MDg1MTctMTk2NjAwOWUtNGMxMC00MDg5LWE3OTMtZjNmNzc4ZjMxODA5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDA3MjYxOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxMjEyODNjYzk2MTZhMmNhYThkODljMjIyZmM3MWZhZGMzN2IwMTFhYzU4ZGE0NGRiNjc5MDdjOTMyMmEyODQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Hq2fhSXch_aAV4NoT8pePvfTB0i7-43n6HQ2Fd453_A)>/div> img classimg-placeholder srchttps://user-images.githubusercontent.com/95608811/291508517-1966009e-4c10-4089-a793-f3f778f31809.png?jwteyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDI5NzEwNzksIm5iZiI6MTcwMjk3MDc3OSwicGF0aCI6Ii85NTYwODgxMS8yOTE1MDg1MTctMTk2NjAwOWUtNGMxMC00MDg5LWE3OTMtZjNmNzc4ZjMxODA5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTklMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjE5VDA3MjYxOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQxMjEyODNjYzk2MTZhMmNhYThkODljMjIyZmM3MWZhZGMzN2IwMTFhYzU4ZGE0NGRiNjc5MDdjOTMyMmEyODQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Hq2fhSXch_aAV4NoT8pePvfTB0i7-43n6HQ2Fd453_A>/div> div classwrapper> div classpage-banner-inner>div classpage-banner-default> h1 classpage-banner-heading> Inlee's Blog /h1> h2 classpage-banner-subheading> Spring, JPA, Nest.JS, Docker, LLM etc.. /h2> /div>/div> /div> /section>script> function hashLocate(hashValue) { hashValue hashValue.replace(/^.*#h-/, ); hashValue decodeURIComponent(hashValue); var element document.getElementById(hashValue); if (!element) { return; } var header document.querySelector(header.site-header); var headerRect header.getBoundingClientRect(); var headerTop Math.floor(headerRect.top); var headerHeight Math.floor(headerRect.height); var scrollPos getScrollPos(); var offsetY element.offsetTop - (headerTop + headerHeight + 20); if (offsetY scrollPos.y) { return; } if (headerTop 0 && offsetY > scrollPos.y) { offsetY + headerHeight + 2; } else if (headerTop 0 && offsetY scrollPos.y) { offsetY - headerHeight - 2; } smoothScrollTo(offsetY); } // The first event occurred window.addEventListener(load, function(event) { if (window.location.hash) { hashLocate(window.location.hash); } }); // The first event occurred window.addEventListener(click, function(event) { if (event.target.tagName.toLowerCase() a) { hashLocate(event.target.getAttribute(href)); } });/script>div classtheme-toggle> input typecheckbox idtheme-switch> label fortheme-switch> div classtoggle>/div> div classnames> p classlight>Light/p> p classdark>Dark/p> /div> /label>/div>script> (function() { var sw document.getElementById(theme-switch); var html document.getElementsByTagName(html)0; var nightModeOption (auto || auto).toLowerCase(); var storage nightModeOption manual ? localStorage : sessionStorage; var themeData loadThemeData(); function saveThemeData(data) { storage.setItem(theme, JSON.stringify(data)); } function loadThemeData() { var data storage.getItem(theme); try { data JSON.parse(data ? data : ); } catch(e) { data { nightShift: undefined, autoToggleAt: 0 }; saveThemeData(data); } return data; } function handleThemeToggle(nightShift) { themeData.nightShift nightShift; saveThemeData(themeData); html.dataset.theme nightShift ? dark : light; setTimeout(function() { sw.checked nightShift ? true : false; }, 50); } function autoThemeToggle() { // Next time point of theme toggle var now new Date(); var toggleAt new Date(); var hours now.getHours(); var nightShift hours > 19 || hours 7; if (nightShift) { if (hours > 7) { toggleAt.setDate(toggleAt.getDate() + 1); } toggleAt.setHours(7); } else { toggleAt.setHours(19); } toggleAt.setMinutes(0); toggleAt.setSeconds(0); toggleAt.setMilliseconds(0) var delay toggleAt.getTime() - now.getTime(); // auto toggle theme mode setTimeout(function() { handleThemeToggle(!nightShift); }, delay); return { nightShift: nightShift, toggleAt: toggleAt.getTime() }; } // Listen the theme toggle event sw.addEventListener(change, function(event) { handleThemeToggle(event.target.checked); }); if (nightModeOption auto) { var data autoThemeToggle(); // Toggle theme by local setting if (data.toggleAt > themeData.autoToggleAt) { themeData.autoToggleAt data.toggleAt; handleThemeToggle(data.nightShift); } else { handleThemeToggle(themeData.nightShift); } } else if (nightModeOption manual) { handleThemeToggle(themeData.nightShift); } else { var nightShift themeData.nightShift; if (nightShift undefined) { nightShift nightModeOption on; } handleThemeToggle(nightShift); } })();/script>div idclick-to-top classclick-to-top> i classfa fa-arrow-up>/i>/div>script> (function () { const clickToTop document.getElementById(click-to-top); window.addEventListener(scroll, () > { if (window.scrollY > 100) { clickToTop.classList.add(show) }else { clickToTop.classList.remove(show) } }); clickToTop.addEventListener(click, () > { window.smoothScrollTo(0); }); })();/script>main classpage-content aria-labelContent> div classwrapper> div classframework> section classmain> div classarticles> div classpagination> !-- Post list links --> ul classpost-list>li> h2 classpost-title> a classpost-link href/architecture/2024/02/10/msa.html> 마이크로서비스 아키텍처(MSA):현대적 서비스 개발의 새로운 패러다임 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Feb 10, 2024/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/architecture/2024/02/10/msa.html> p> 마이크로서비스 아키텍처(MSA): 비즈니스 민첩성을 위한 현대적 접근 방식마이크로서비스 아키텍처(MSA)는 애플리케이션을 더 작고, 독립적으로 배포 가능한 서비스로 분해함으로써, 비즈니스 기능을 중심으로 구성된 현대적인 서비스 개발 방식입니다. 이 접근 방식은 기업이 변화하는 시장 요구사항에 빠르게 대응하고, 높은 수준의 민첩성을 유지할 수 있도록 지원합니다.MSA의 장단점장점 민첩성 및 확장성 향상: 각 서비스를 독립적으로 개발하고 배포할 수 있어, 변화에 빠르게 대응하고 시스템을 확장하기 용이합니다. 장애 격리: 한 서비스의 실패가 전체 시스템에 영향을 미치지 않아 시스템의 전반적인 안정성... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#architecture>#architecture/a>/div> /li>li> h2 classpost-title> a classpost-link href/architecture/2024/02/09/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D.html> 모놀리식 아키텍처 - 단일 시스템의 장점과 한계 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Feb 09, 2024/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/architecture/2024/02/09/%EB%AA%A8%EB%86%80%EB%A6%AC%EC%8B%9D.html> p> 모놀리식 아키텍처: 전통적인 소프트웨어 개발의 근간모놀리식 아키텍처는 소프트웨어 개발의 가장 전통적인 방식 중 하나로, 애플리케이션의 모든 구성 요소가 하나의 대규모 코드 베이스 안에서 밀접하게 연결되어 있는 구조를 말합니다. 이러한 접근 방식은 그 단순함과 직관적인 구조로 인해 여전히 많은 프로젝트와 조직에서 선호되고 있습니다.핵심 특징 단일 프로세스 실행: 애플리케이션의 모든 기능이 하나의 실행 가능한 파일 내에서 작동하며, 단일 데이터베이스 엔드포인트를 사용합니다. 재배포의 필요성: 작은 수정이라도 전체 애플리케이션을 다시 배포해야 하는 경우가 많습니다. 구성의 유연성: 싱글 또는 멀티 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#architecture>#architecture/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/31/%EA%B0%92%ED%83%80%EC%9E%85.html> (JPA-7)값 타입과 값 타입 컬렉션 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 31, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/31/%EA%B0%92%ED%83%80%EC%9E%85.html> p> 들어가기전에데이터베이스와의 효율적인 상호작용은 모든 웹 애플리케이션의 핵심입니다. Spring JPA는 이러한 상호작용을 단순화하고 강화하는 다양한 기능을 제공합니다. 이 글에서는 그 중 ‘값타입(Value Types)’과 ‘값타입 컬렉션(Collection Value Types)’에 초점을 맞추어 설명하겠습니다.값 타입이란?값타입은 데이터베이스에서 실제 값을 나타내는 데이터 타입입니다. 이는 엔티티의 구성 요소이지만, 자체적으로는 식별자를 가지지 않습니다.값타입의 종류와 사용기본값 타입: 자바의 기본 타입(int, double 등), 래퍼 클래스(Integer, Long 등), String이 여... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/25/%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9%EA%B3%BC%EC%A6%89%EC%8B%9C%EB%A1%9C%EB%94%A9.html> (JPA-6)지연로딩과 즉시로딩 그리고 영속성 전이 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 25, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/spring/2023/12/25/%EC%A7%80%EC%97%B0%EB%A1%9C%EB%94%A9%EA%B3%BC%EC%A6%89%EC%8B%9C%EB%A1%9C%EB%94%A9.html> p> 지연 로딩(LAZY)과 즉시 로딩(EAGER)의 이해지연 로딩(LAZY)의 원리지연 로딩은 객체가 실제로 사용될 때까지 데이터베이스로부터 로드를 지연시키는 방식입니다. 예를 들어, 한 Member 객체가 Team 객체와 연관되어 있다고 할 때, 지연 로딩을 사용하면 Member 객체를 로드할 때 Team 객체는 로드되지 않습니다.@Entitypublic class Member { @Id @GeneratedValue private Long id; @Column(name USERNAME) private String name; @ManyToOne(fetch ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/24/Proxy.html> (JPA-5)JPA의 프록시에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 24, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/24/Proxy.html> p> 프록시(Proxy)란 무엇인가?프록시의 기본 개념 프록시는 간단히 말해 ‘대리자’ 또는 ‘중개자’입니다. 실제 객체를 대신하여 다양한 작업을 수행합니다. 이는 마치 우리가 은행 업무를 처리하기 위해 대리인을 보내는 것과 유사합니다. 대리인은 우리를 대신하여 업무를 처리하며, 필요한 경우에만 우리에게 연락을 취합니다. 정의: 프록시는 실제 객체를 감싸는 래퍼(Wrapper) 역할을 합니다. 이를 통해 실제 객체에 대한 접근을 제어하거나, 추가적인 기능을 제공합니다. 목적: 주로 접근 제어, 지연 로딩, 로깅, 트랜잭션 처리 등을 위해 사용됩니다.em.find() vs em.getRefere... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/20/Superclass.html> (JPA-4)MappedSuperclass 공통매핑정보의 재사용 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 20, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/20/Superclass.html> p> MappedSuperclass: 공통 매핑 정보의 재사용개요MappedSuperclass는 JPA에서 상속 관계 매핑이 아닌 공통 매핑 정보의 재사용을 위해 사용됩니다. 이 방법은 데이터베이스 설계와 객체지향 설계의 불일치 문제를 해결하는 데 도움을 줍니다.주요 특징 공통 매핑 정보 제공: @MappedSuperclass로 지정된 클래스는 데이터베이스 테이블로 직접 매핑되지 않습니다.대신, 이 클래스에 정의된 매핑 정보(필드, 관계, 메서드 등)는 상속받는 자식 클래스에게 상속됩니다. 엔티티가 아님: @MappedSuperclass로 지정된 클래스는 엔티티가 아닙니다.... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/15/%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84.html> (JPA-3)고급매핑 상속관계매핑 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 15, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/spring/2023/12/15/%EC%83%81%EC%86%8D%EA%B4%80%EA%B3%84.html> p> 들어가기 전에이전글 연관관계 매핑 포스트를 보고 오면 좋습니다.고급 매핑: 상속관계 매핑객체지향 프로그래밍에서 상속은 중요한 개념입니다. 이를 데이터베이스와 연동할 때, 어떻게 효과적으로 구현할 수 있을까요? JPA(Java Persistence API)를 사용하면, 슈퍼타입과 서브타입 관계를 물리 모델로 효율적으로 변환할 수 있습니다. 이를 위한 세 가지 전략이 있습니다:각각의 테이블로 변환 (조인 전략) 통합 테이블로 변환 (단일 테이블 전략) 서브타입 테이블로 전환 (구현 클래스마다 테이블 전략) 주요 어노테이션 이러한 전략을 구현하기 위해 JPA에서는 다음과 같은 어노... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/09/%EC%97%B0%EA%B4%80%EA%B4%B8%EA%B3%84%EB%A7%A4%ED%95%91.html> (JPA-2)JPA 연관관계 매핑과 연관관계의 주인 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 09, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 5 mins/span> /div> a classpost-excerpt href/spring/2023/12/09/%EC%97%B0%EA%B4%80%EA%B4%B8%EA%B3%84%EB%A7%A4%ED%95%91.html> p> 들어가기 전에이전글 영속성 컨텍스트 포스트를 보고 오면 좋습니다.연관관계 매핑 기초ORM을 사용하는 데 있어서 가장 중요한 개념 중 하나는 객체와 테이블의 차이를 이해하는 것이라고 생각한다. 사실 DB만 잘 배우는 것도 쉽지 않은데, 안타깝게도 ORM을 사용하려면 기본적인 DB 지식이 있어야 한다. 방향(Direction): 단방향, 양방향 다중성(Multiplicity): 다대일(N:1), 일대다(1:N), 일대일(1:1), 다대다(N:M) 이해 연관관계의 주인(Owner): 객체 양방향 연관관계는 관리주인이 필요1. 단방향 연관관계 (N:1)예를 들어, 주문(Order)이 고... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/02/%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8.html> (JPA-1)JPA와 영속성 컨텍스트 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 02, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 8 mins/span> /div> a classpost-excerpt href/spring/2023/12/02/%EC%98%81%EC%86%8D%EC%84%B1-%EC%BB%A8%ED%85%8D%EC%8A%A4%ED%8A%B8.html> p> 들어가기 전에사실 스프링 공부를 여러번 시도 했었다. HTTP, WAS, DB 등 백앤드에 관련된 지식이 없을 때 무작정 인프런에서 유명하다는 강사님의 인강을 보면서 따라 쳤는데강의 내용의 반의 반도 습득하지 못했었다. 그렇게 두 번, 세 번 전체강의를 돌려보았고 결국 완벽한 이해는 못한 채 다른 프로젝트들을 시작했다. Flask, Nest.js 등의 다른 프레임워크를 사용하다가 현업에서 가장 많이 쓰고 강력한 무기인 Spring을 다 씹어먹지 못한 게 너무 한이되어 다시 처음부터 개념을 씹어먹을거라는 각오로 블로그 글을 작성하면서 다시 공부하기로 했다. 그래서, Code-based인 다른 포스트... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2023/12/01/DI%EC%99%80IOC.html> Spring DI와 IoC 컨테이너에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Dec 01, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2023/12/01/DI%EC%99%80IOC.html> p> DI(의존관계 주입) / 스프링 컨테이너DI(의존관계 주입)는 애플리케이션 실행 시점에 외부에서 실제 구현 객체를 생성하고 클라이언트에 전달하는 과정을 의미합니다. 이를 통해 클라이언트와 서버의 실제 의존관계가 연결됩니다.IoC 컨테이너, DI 컨테이너IoC(Inversion of Control) 컨테이너는 객체의 생성과 관리를 담당합니다. AppConfig와 같은 클래스가 이 역할을 수행합니다.@Bean 어노테이션@Bean 어노테이션은 스프링 컨테이너에 의해 관리될 객체를 선언할 때 사용됩니다. 예를 들어:@Configurationpublic class AppConfig { @Bea... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/ai/2023/04/05/perceptron.html> 인공신경망과 퍼셉트론 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Apr 05, 2023/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/ai/2023/04/05/perceptron.html> p> 퍼셉트론과 신경망퍼셉트론은 신경망의 기본 구성요소입니다. 신경망(Neural Net)의 기본 구조를 보면 보통 아래와 같이 그립니다.이 중 파란색으로 동그라미 친 부분, 신경망의 구성요소를 퍼셉트론이라고 합니다. 다른 말로는 Dense(밀집) 혹은 노드(Node) 라고도 부릅니다.퍼셉트론의 구성요소위 그림의 신경망에서 하나의 퍼셉트론을 확대해서 보면,그림과 같이 퍼셉트론은 입력(inputs), 가중치(Connection Weight), 바이어스(bias), 합 연산(Sum), 활성 함수(Activation Function)로 구성되어 있습니다. 오느날 인공신경망에서 이용하는 퍼... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#ai>#ai/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring,/java/2022/10/10/SOLID.html> SOLID - 객체 지향 설계의 5가지 원칙 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Oct 10, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring,/java/2022/10/10/SOLID.html> p> SOLID클린코드로 유명한 로버트 마틴의 객체 지향 설계의 5가지 원칙SOLID란 객체 지향 프로그래밍을 하면서 지켜야하는 5대 원칙으로 각각 SRP(단일 책임 원칙), OCP(개방-폐쇄 원칙), LSP(리스코프 치환 원칙), DIP(의존 역전 원칙), ISP(인터페이스 분리 원칙)의 앞글자를 따서 만들어졌다. SOLID 원칙을 철저히 지키면 시간이 지나도 변경이 용이하고, 유지보수와 확장이 쉬운 소프트웨어를 개발하는데 도움이 되는 것으로 알려져있다.SRP : 단일 책임 원칙 (single responsibility principle) 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/spring/2022/09/20/sprig%EC%8B%9C%EC%9E%91.html> JAVA Spring 시작하기 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 20, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/spring/2022/09/20/sprig%EC%8B%9C%EC%9E%91.html> p> Spring 라이브러리Spring Boot Library spring-boot-starter-web spring-boot-starter-tomcat : 톰캣(웹서버) spring-webmvc : 스프링 웹 MVC spring-boot-starter-thymeleaf : 타입리프 템플릿 엔진(View) spring-boot-starter(공통) : 스프링부트 + 스프링코어 + 로깅 spring-boot spring-core... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#spring>#spring/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/09/19/Makefile.html> C언어 Makefile 이해하기 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 19, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/c/2022/09/19/Makefile.html> p> Makefile 왜 쓰는데?간단한 소스코드 파일 한두개라면 몰라도 컴파일 해야할 코드 갯수가 굉장히 많아지면 gcc 방식으로 하나하나 컴파일 하는것은 시간도 오래걸리고 굉장히 귀찮은 일이된다. 그래서 반복적인 작업을 피하기 위해서 쓰는것이 make 유틸리티이다.make / Makefilemake는 유틸리티 이름이다. make 유틸리티는 Makefile이라는 파일의 내용을 읽어서 목표 파일(target)을 만듭니다.컴파일과정 c파일에서 object 파일 생성하기 ex) gcc -c -o ft_strlen.o ft_strlen.c -c 옵션은 해당 c파일을 .o(오브젝트)파일... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#c>#c/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/09/18/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EC%99%80-id.html> C언어 write 함수 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Sep 18, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/c/2022/09/18/%ED%99%98%EA%B2%BD%EB%B3%80%EC%88%98%EC%99%80-id.html> p> unistd.h 가 뭔데?POSIX 운영체제 API에 대한 엑세스를 제공하는 헤더파일이다. 보통 Unix 에 쓰이는 표준 심볼들과 상수들을 정의해 놓은 것이기 때문에 unistd.h에 포함되어 있는 내용은 대부분 유닉스환경에서만 쓸 수 있다.write 함수를 어디에 쓰는건데?#include <unistd.h>ssize_t write(int fd, void* buf, size_t nbytes);보통 오픈한 파일에 데이터를 쓸 때 사용하는 함수이다. return value : 성공 시 기록된 바이트수, 에러시 -1을 return 한다.그런데,해당 함수를 에 있는 printf()... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#c>#c/a>/div> /li>li> h2 classpost-title> a classpost-link href/c/2022/08/12/c%EC%96%B8%EC%96%B4%ED%8F%AC%EC%9D%B8%ED%84%B0.html> C언어 포인터와 동적메모리 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Aug 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 4 mins/span> /div> a classpost-excerpt href/c/2022/08/12/c%EC%96%B8%EC%96%B4%ED%8F%AC%EC%9D%B8%ED%84%B0.html> p> 메모리 영역 코드 영역 코드 영역은 이름 처럼 작성한 코드를 저장하는 영역입니다. 데이터 영역 데이터 영역은 전역 변수와 정적 변수를 저장하는 영역입니다. 전역 변수는 프로그램이 시작되면서 초기화됩니다. 그러므로 데이터 영역은 프로그램 시작시에 이미 메모리가 확보되어 크기가 변하지 않음을 알 수 있습니다. 힙 영역힙영역은 동적 메모리를 할당하는 영역입니다. C언어로 코드를 작성할 때 직접 메모리를 할당할 때가 있습니다. 이 때 메모리를 할당하는 영역이 바로 힙 영역입니다. 힙에 저장된 메모리는 함수호출이 종료되어도 사라지지 않기 때문에, ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#동적할당>#동적할당/a>a classpost-tag href/tags.html#메모리>#메모리/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/permission.html> 권한의 이해와 설정 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/system/2022/07/13/permission.html> p> 권한이란?리눅스의 모든 파일과 디렉토리는 권한(permission)을 가지고 있다. 리눅스의 파일시스템 상에 권한에 대한 정보를 저장하는 부분이 있다. 퍼미션들은 시스템 상에 존재하는 파일들에 대한 읽기,쓰기,실행에 대한 접근 여부를 결정한다. ls -l 명령어로 확인 가능 (첫번째 필드, -rwxr-wr–) 이러한 퍼미션은 다중 사용자 환경을 제공하는 리눅스 환경에서는 가장 기초적인 접근 통제 방법권한 설정 방법 chmod 권한 파일 또는 디렉토리 이름 권한 : 권한을 입력할 때는 심볼릭 모드와 옥텟(8진수) 모드 2가지 방식을 이용하여... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/hardlink.html> 하드링크와 심볼릭 링크 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/system/2022/07/13/hardlink.html> p> 링크란 무엇인가? 특정 파일 또는 디렉토리에 접근을 쉽게 할 수 있도록 하는 방법 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것하드링크 특정 파일 또는 디렉토리에 접근을 쉽게 할 수 있도록 하는 방법 파일 시스템이 물리적인 장치인 하드 디스크 상에 저장되어 있는 특정 파일의 위치를 가리키는 것심볼릭링크 윈도우의 바로가기 개념과 슷하며 실질적인 디스크 상의 파일을 가리키는 것이 아니라 파일 시스템 상의 특정 파일을 가리키는 것링크 생성 명령어 ln 옵션 원본 링크 옵션을 지정하지 않고 링크 파일을 생성하면 하드... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/07/13/grep.html> 파일 및 디렉토리 검색 - grep/find /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jul 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/system/2022/07/13/grep.html> p> 파일 내용에서 검색 grep 파일 내용에서 특정 내용만 찾을때 사용 grep 옵션 패턴 파일이름 옵션 : 좀 더 디테일한 조건으로 찾을 때 사용 패턴 : 찾고 싶은 내용을 입력, 일치하는 내용을 출력. 정규표현식 사용 가능 파일 이름 : grep 명령어로 특정 내용을 검색할 파일을 지정한다. ex ) grep -i root/ect/id옵션-i : 대소문자 무시 (word와 WoRD 를 구분하지 않는다.) -n : 줄 번호 표시 (line 넘버를 표시한다.) -v : 패턴을 제외한 내용만 출력 -w : 단어 단위로 검색 (ro 를 검색하면 root ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/java/2022/06/18/JavaEvent.html> Java GUI and EventListener /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 18, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 17 mins/span> /div> a classpost-excerpt href/java/2022/06/18/JavaEvent.html> p> `` 먼저 모든 import문은 eclipse 자동생성으로 만드는걸 default로 한다.즉, 코드에 import문은 넣지 않으므로 자동생성 해서 쓰길 권장한다.입출력 스트림 파일 객체 생성 File f new File(c:\\windows\\system.ini); * 파일의 경로명 String filename f.getName(); // system.iniString path f.getPath(); // c:\\windows\\system.iniString parent f.getParent(); // c:\\windows... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#java>#java/a>a classpost-tag href/tags.html#gui>#gui/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/13/%EA%B5%AC%EC%A1%B0%EC%B2%B4forC.html> 구조체 for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/13/%EA%B5%AC%EC%A1%B0%EC%B2%B4forC.html> p> 구조체를 이용한 파일처리프로그래밍에 필요한 데이터가 파일로 제공되는 경우 각 파일에는 필요한 필드로 구성된레코드를 저장하는 경우가 많다. 이렇게 저장된 파일의 데이터를 프로그램에서 사용하려면구조체를 활용해야한다. 구조체는 서로 형이 다를 수 있는 여러 변수들의 모임을 하나의 이름으로 가지고 있는 자료구조이다. 구조체는 그 목적에 따라 필요한 구성요소를 정하여 다음과 같이 선언할 수 있다. struct employee { char name20; long id; int depend; float salary;};struct employee e1; strcpy(e1.name, “Ho... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/13/StackForC.html> Stack(스택)for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 13, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/13/StackForC.html> p> 스택의 정의 한쪽 끝(top)에서 삽입과 삭제가 일어나는 선형리스트LIFO(Last In First Out) 구조 선형리스트의 긑부분에서만 자료의 입력과 출력이 가능하도록 제한된 자료구조 마지막 삽입 (Last-In)한 원소는 맨 위에 쌓여 있다가 가장먼저 삭제(First-Out) 된다. 후입선출 구조 (LIFO) 스택을 운영하기 위하여 끝 부분(top)에 대한 정보가 필요함. 위 그림처럼 끝 부분(top) 에서만 삽입과 삭제가 일어남.스택의 연산 현재 스택의 상태를 나타내는 변수 top, 데이터를 담을 배열 stack이 필요하다.(1... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/algorithm/2022/06/12/%EB%A7%88%EB%B0%A9%EC%A7%84forC.html> MagicSquare(마방진)for C /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/algorithm/2022/06/12/%EB%A7%88%EB%B0%A9%EC%A7%84forC.html> p> 마방진우선 마방진에 대한 개념은 가로,세로,대각선의 합이 같아지도록 정사각형 모양으로 배열한 행렬이다.마방진 만드는 규칙1) 첫번째 행의 중앙에 1을 배열한다. 2) 왼쪽 대각선으로 올라가면서 빈자리에 1씩 큰 수를 배열한다. 이때 행렬의 밖으로 벗어나면 그 방향의 반대편에서 계속한다. 3) 만약 이동해서 채워야하는 자리에 이미 숫자가 배열되어 있다면, 정해진 위치 바로 아래에 숫자를 배열한다. 5x5 마방진 예시규칙을 프로그램으로 짜기 입력 : 0으로 초기화된 n * n의 2차원 배열 tablenn 출력 : n * n의 magic square행을 움직이는 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#C>#C/a>a classpost-tag href/tags.html#algorithm>#algorithm/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/12/SQL%EB%AC%B8%EC%A0%9C.html> SQL문제 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/db/2022/06/12/SQL%EB%AC%B8%EC%A0%9C.html> p> SQL 문법 순서SELECT(마지막) 무엇을 불러올건지 FROM (1) 어디서 WHERE (2) 조건문 GROUP(3) 그룹별 HAVING(4) 가져온것 중에서 조건문 ORDER BY(5) 정렬순서로 작성하면 된다.SQL 문제1) 급여가 400 이상인 사원 이름과 그 사원이 속한 부서이름을 검색하라SELECT ename, dnameFROM dept, empWHERE dept.deptid emp.deptidAND salary > 400;2) ‘영업부’ 와’구매부’ 사원의 급여 합계를 검색하라SELECT SUM(salary)FROM... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/12/SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95.html> SQL기본문법 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 12, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/db/2022/06/12/SQL%EA%B8%B0%EB%B3%B8%EB%AC%B8%EB%B2%95.html> p> SELECT 기능 내가 원하는 정보 가져오기1) 테이블 전체 정보 보기SELECT * FROM Customers; *(asterisk)는 테이블의 모든 컬럼을 뜻한다.2) 원하는 컬럼만 보기SELECT CustomerName FROM Customers;SELECT CustomerName, ContactName, CountryFROM Customers;3) 원하는 조건의 row(행)만 걸러서 보기 WHERE 구문 뒤에 조건을 붙여 원하는 데이터만 가져올 수 있습니다.SELECT * FROM OrdersWHERE EmployeeID 3;SELECT... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/db/2022/06/11/DB%EC%A0%95%EA%B7%9C%ED%99%94.html> DB 정규화 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 11, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 3 mins/span> /div> a classpost-excerpt href/db/2022/06/11/DB%EC%A0%95%EA%B7%9C%ED%99%94.html> p> 정규화 ? DB시스템을 만지다보면 엄청나게 많은 테이블들이 얽혀있어 하나의 데이터를 수정했을때 여러문제가 생길 수 있는데,정규화를 통해서 정해진 규칙대로 테이블을 쪼개게 되면, 문제점들을 사전에 해소할 수 있음. 가장 대표적인 문제점들로는 삭제이상(delete), 삽입이상(insert), 수정이상(update) 삭제이상은 지정된 테이블에서 데이터를 삭제하려고 하는데, 연결된 다른테이블에서도 데이터가 삭제되는 것이다. 삽입이상은 지정된 테이블에 데이터를 삽입하려고 하는데, 연결된 다른테이블에서도 데이터가 삽입되는 것이다. 수정이상은 원하는 데이터를 모두 수정하지 못... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#DB>#DB/a>a classpost-tag href/tags.html#SQL>#SQL/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/06/09/%EB%AC%B8%EC%84%9C%ED%8E%B8%EC%A7%91%EA%B8%B0vi.html> 문서편집기 vi /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 09, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/system/2022/06/09/%EB%AC%B8%EC%84%9C%ED%8E%B8%EC%A7%91%EA%B8%B0vi.html> p> vi 편집기 vi 편집기는 일반적으로 모드가 나누어져 있기 때문에, 따로 공부를 하지 않으면 사용할 때 어려움이 있다. 명령모드 : 모드변경,복사,이동등의 작업 편집모드 : 문서작성 및 편집 Last Line 모드 : 치환, 저장 및 종료 수행 명령모드에서 i,o,a 를 입력하면 편집모드로 이동된다 i 는 커서의 앞부분 부터, a 는 커서의 다음부분 부터, o를 입력하면 커서의 아래라인부터 입력이 된다 명령모드에서 :를 입력하면 Last Line 모드로 넘어가게 된다 Last Line 모드에서 :wq 등의 명령어로 모드에서 나올 수 있... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#vi>#vi/a>a classpost-tag href/tags.html#vim>#vim/a>/div> /li>li> h2 classpost-title> a classpost-link href/system/2022/06/07/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EB%B3%B8%ED%99%98%EA%B2%BD.html> 리눅스 기본구조와 명령어 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> Jun 07, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/system/2022/06/07/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EB%B3%B8%ED%99%98%EA%B2%BD.html> p> 리눅스 기본 환경 명령줄 인터페이스 텍스트 터미널을 통해 사용자의 컴퓨터가 상호 작용하는 방식을 뜻한다. 즉, 작업 명령은 사용자가 컴퓨터 키보드 등을 통해 문자열의 형태로 입력하며 컴퓨터로부터의 출력 역시 문자열의 형태로 주어진다. 명령어 구조 명령어 : 시스템에서 특정 작업을 하기 위해 실행파일, 프로그램 옵션 : 명령어를 어떻게 실행할 것인지 지정일반적으로 대시(-) 문자 뒤에 옵션을 지정 아규먼트(Argument) :명령어에 의해서 영향을 받는 파일 or 디렉토리 등 특정 대상 ex) ls -al, ifconfig -a, netstat ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#linux>#linux/a>/div> /li>li> h2 classpost-title> a classpost-link href/git/2022/05/31/Git%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> Git과 Github /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 31, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/git/2022/05/31/Git%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 깃 : 버전관리시스템 VCS: version control system깃허브 버전관리 깃의 원격 저장소 웹 호스팅 서비스 소프트웨어 개발 활용 소셜 코딩 플랫폼 전 세계 개발자를 위한 프로젝트 수행 협업 서비스 프로젝트 개발 및 운영 서비스깃허브를 쓰는 이유 규모에 상관없이 모든 회사와 조직에서 원하는 공개 및 비공개 프로젝트에 필요한 중요 DevOps 기능을 제공하기 때문 계획 수립 기능, 버그 수정, 변경 사항 관련 협업 등을 진행할 때 GitHub를 사용하면 전 세계 소프트웨어 개발자와 함께 작업 가능 그리고 더 나은 제품을 만들 가능성 향상 Gi... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#git>#git/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/29/Javascrpt%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> 자바스크립트에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 29, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/web/2022/05/29/Javascrpt%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.자바스크립트의 특징자바스크립트는 HTML, CSS와 함께 웹을 구성하는 요소 중 하나로 웹 브라우저에서 동작하는 유일한 프로그래밍 언어이다.(Vue,React,Angular 등도 javascript기반으로 만들어진 프레임워크이다.) ~python기반의 pyscript도 javascript 기반이다.~자바스크립트는 기존의 프로그래밍 언어에서 많은 영향을 받았다.기본 문법은 C, Java와 유사하고 Self에서는 프로토타입 기반 상속을, Scheme에서는 일급 함수의 개념을 차용했다.~ 그래서 매우 근본이 없다.. 필요해서 막 만들었다는게 학계의 정설이다 ~ 자바스크립트는 개발자가 별도의 컴파일 ... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#javascript>#javascript/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/28/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> 프로그래밍이란? for JS /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 28, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/28/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.본격적으로 JS(자바스크립트)를 설명하기전에, 프로그래밍이란 ? 앞서 설명했던 html과 css와는 다르게 JS(자바스크립트를 편의상 JS라고 하겠다.) 는 프로그래밍언어이기 때문에 프로그래밍에 대해서 간략하게 설명하고 넘어가겠다.프로그래밍 이란 컴퓨터에게 실행을 요구하는 일종의 커뮤니케이션이다. 이를 위해서 무엇을 원하고 어떤식으로 컴퓨터에게 명령을 전달하는 지를 알아야한다. 다시 말해, 프로그래밍에 앞서 문제(요구사항)를 명확히 이해한 후 적절한 문제 해결 방안의 정의가 필요하다.컴퓨터는 0과 1밖에 알지못하기 때문에 우리가 원하는 요구사항을 컴퓨터가 알아들을 수 있게 정확하고 상세하게 코... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#javascript>#javascript/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/26/%EC%8B%9C%EB%A7%A8%ED%8B%B1%EC%9A%94%EC%86%8C%EC%99%80-%EC%9B%B9.html> 시맨틱 웹(Semantic Web) /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 26, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/26/%EC%8B%9C%EB%A7%A8%ED%8B%B1%EC%9A%94%EC%86%8C%EC%99%80-%EC%9B%B9.html> p> 시맨틱 웹이 뭔데? 시멘틱 웹에 관한부분은 PoiemaWeb (웹프로그래밍튜토리얼) 사이트 참조2022년 퍼블리싱 되고 있는 웹사이트의 갯수는 약20억개, 인터넷사용자수는 53만명이다. 출처 : https://www.internetlivestats.com/대부분의 인터넷 사용자는 원하는 정보를 취득하기 위해 Google이나 Naver와 같은 검색사이트를 이용한다. 웹사이트는 검색엔진에 의한 노출이 매우 중요하다. 당연한 것이 검색엔진에 노출되지 않는 웹사이트에는 접속하는 이도 없기 때문이다. 검색엔진은 이 시대의 가장 강력한 권력 중의 하나라고 말할 수도 있겠다.SEO(검색엔진 최적화... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#html>#html/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/25/CSS%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> CSS에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 25, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 1 min/span> /div> a classpost-excerpt href/web/2022/05/25/CSS%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> CSS가 뭔데?CSS(Cascading Style Sheets)는 HTML이나 XML과 같은 구조화 된 문서(Document)를 화면, 종이 등에 어떻게 렌더링할 것인지를 정의하기 위한 언어이다. 즉, CSS는 HTML의 각 요소(Element)의 style(design, layout etc)을 정의하여 화면(Screen) 등에 어떻게 렌더링하면 되는지 브라우저에게 설명하기 위한 언어이다. 그냥 웹페이지에서 HTML 로 만들어둔 웹 구조 위에 스타일을 입히는 작업이다.프론트엔드 개발자를 희망하면서, CSS는 배우기를 꺼려하는 초보개발자들이 종종 보인다.CSS는 HTML이라는 구조에 단순히 색을 입히... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#css>#css/a>/div> /li>li> h2 classpost-title> a classpost-link href/web/2022/05/24/HTML5%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> HTML에 대해서 /a> /h2> div classpost-meta> span classpost-date>i classfa fa-calendar>/i> May 24, 2022/span> span classpost-reading-time left-vsplit>i classfa fa-clock-o>/i> About 2 mins/span> /div> a classpost-excerpt href/web/2022/05/24/HTML5%EC%97%90-%EB%8C%80%ED%95%B4%EC%84%9C.html> p> 1.HTML 이 뭔데?HTML (HyperText Markup Language)은 웹페이지를 기술하기 위한 마크업 언어이다. 조금 더 자세히 말하면 웹페이지의 내용(content)과 구조(structure)을 담당하는 언어로써 HTML 태그를 통해 정보를 구조화하는 것이다.좀 더 직관적으로 말하자면, 처음 웹개발을 시작하는 이들이라면 HTML CSS Javascript를 우선적으로 공부하게 되는데, HTML은 웹페이지의 내용과 구조를 담당하고, CSS는 웹페이지의 디자인과 스타일을 담당하고, Javascript는 웹페이지에서의 동작(행동)들을 프로그래밍 하는 언어라고 생각하면 당장 공부를 시작... span classread_more>Read More/span> /p> /a> div classpost-tags>a classpost-tag href/tags.html#web>#web/a>a classpost-tag href/tags.html#html>#html/a>/div> /li>/ul> !-- Pagination links -->/div>/div> /section> section classsidebar stylemargin-left: 15px;> !-- Get sidebar items -->div classcommon-list> ul> li> a href/index.html> Allspan>34/span> /a> /li> li> a href/categories.html#h-DB> DB span>3/span> /a> /li> li> a href/categories.html#h-System> System span>5/span> /a> /li> li> a href/categories.html#h-ai> ai span>1/span> /a> /li> li> a href/categories.html#h-algorithm> algorithm span>3/span> /a> /li> li> a href/categories.html#h-architecture> architecture span>2/span> /a> /li> li> a href/categories.html#h-c> c span>3/span> /a> /li> li> a href/categories.html#h-git> git span>1/span> /a> /li> li> a href/categories.html#h-java> java span>2/span> /a> /li> li> a href/categories.html#h-spring> spring span>9/span> /a> /li> li> a href/categories.html#h-spring,> spring, span>1/span> /a> /li> li> a href/categories.html#h-web> web span>5/span> /a> /li> /ul>/div>/section>/div> /div> /main>footer classsite-footer h-card> data classu-url href/>/data> div classwrapper> div classsite-footer-inner>div>Copyright 2022. inlee All pictures can be copied without permission. 2022-2024 inlee/div> div>Powered by a titleJekyll is a simple, blog-aware, static site generator. hrefhttps://jekyllrb.com/>Jekyll/a> & a titleYat, yet another theme. hrefhttps://github.com/jeffreytse/jekyll-theme-yat>Yat Theme/a>./div> div classfooter-col rss-subscribe>Subscribe a href/feed.xml>via RSS/a>/div> /div> /div>/footer>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]