๐ Memody Homepage
-
๋ค์ํ ๋ถ์ผ์ ๋ธ๋ก๊ทธ๋ฅผ ์กฐํํ ์ ์๊ณ , ์ง์ ๋ธ๋ก๊ทธ๋ฅผ ๋ง๋ค์ด ์ด์ํ ์ ์๋ค.
-
๊ฐ์ธ๋ฟ๋ง ์๋๋ผ ๋ค์๊ฐ ๋ธ๋ก๊ทธ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
-
๋ธ๋ก๊ทธ ๋ด์ฉ์ ๊ณต์ ํ ์ ์๋ ์ํ๊ณ ๊ตฌ์ถ
- ํ ๋ธ๋ก๊ทธ์ ๊ฒ์๊ธ์ Forkํ์ฌ ๋ด ๋ธ๋ก๊ทธ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ค.
- ์ฌ๊ธฐ์ ๊ธฐ ํผ์ ธ์๋ ๋ค์ํ ์ ๋ณด๋ค์ ๋ด ๋ธ๋ก๊ทธ๋ก ๋ชจ์ ์ ์๋ค.
-
๋ญํน ์์คํ ๋์
- ๋ธ๋ก๊ทธ์ ์กฐํ์, ๊ฒ์๊ธ์ด Fork๋ ํ์๊ฐ ๋ง์์ง์๋ก ์ํฅ๋ ฅ์๋ ๋ธ๋ก๊ฑฐ๊ฐ ๋๋ค.
- ๋ญํน ์์คํ ์ ํตํด ์ ๋ช ํ ๋ธ๋ก๊ฑฐ๊ฐ ๋๊ธฐ ์ํด ๋ค์ํ๊ณ ์ ์ตํ ์ ๋ณด๋ค์ ๊ณต์ ํ ์ ์๋ ์ํ๊ณ๊ฐ ํ์ฑ๋๋ค.
BACKEND
- Programming Languages : [ Java 8 ]
- Frameworks : [ Spring ]
- Tool : [ Spring boot ]
- SQL data storage : [ MySQL ]
- Key-value storage : [ Redis ]
- Web Server : [ Nginx ]
- Web application server : [ Apache Tomcat ]
- Hosting : [ AWS ]
FRONTEND
- Programming Languages : [ JavaScript, HTML5, CSS3 ]
- JavaScript Framework : [ Vue.js ]
Spring boot : Memody Project์ ์ ๋ฐ์ ์ธ ๊ธฐ๋ฅ Rest Controller ๊ตฌํ
Swagger : Swagger๋ฅผ ์ด์ฉํ์ฌ RESTful API ๋ฌธ์ ์๋ํ (http://i3a306.p.ssafy.io:8499/swagger-ui.html)
Spring Security + JWT : ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ์๋น์ค๋ฅผ ์ฌ์ฉ๊ฐ๋ฅ ํ๋๋ก(filter), Token์ ๊ณ์ ๊ฒ์ฌํด์ ์ ํจํ ํ์์ธ์ง ํ์ธ
Spring Data JPA: JpaRepository๋ฅผ ์์๋ฐ์ ์ฟผ๋ฆฌ ์์ฑ์ ํ์ง ์๊ณ DB Table์ ๊ฐ์ฒด๋ก ์ ๊ทผํ๊ฒ ํ์ฌ ๊ธฐ๋ฅ๋ค์ ๊ตฌํ
XSS Filter : ๋ค์ด๋ฒ์์ ์ ๊ณตํ๋ lucy-xss-servlet-filter ๋ฅผ ์ด์ฉํ์ฌ ์๋ฒ๋ก ๋ณด๋ด๋ ์ ๋ ฅ ๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๋ณด๋ด์
๋ค๋ฅธ ์ฌ์ฉ์์๊ฒ ์์ ์ด ๋ง๋ ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์์ผ์ ์ฌ์ฉ์์ ์ ๋ณด๋ฅผ ๋นผ๋ด๋ XSS ๊ณต๊ฒฉ์ ๋๋นํ๋๋ก ๊ตฌํ
MySql : ์ฌ์ฉ์ ๋ฐ ๋ธ๋ก๊ทธ, ๊ฒ์๊ธ ๋ฑ Memody PJT์์ ํ์ํ Data๋ฅผ ์ ์ฅ
Redis : Key์ value๊ฐ ๋งคํ๋ ๋จ์ํ ๋งต ๋ฐ์ดํฐ ์ ์ฅ์๋ก์ ๋ฐ์ดํฐ๋ฅผ ๋ ๋์ค์ ์ฝ๊ณ ํธํ๊ฒ ์ฝ๊ณ ์ธ ์ ์๊ฒ ํ์์ต๋๋ค. Memody PJT์์๋ ๋ก๊ทธ์์ํ ์ฌ์ฉ์์ ํ ํฐ์ ๋ง๋ฃ์๊ฐ๊น์ง ์ ์ฅํด๋๋ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๊ตฌ์ฑํ์๊ณ , ์ด๋ฉ์ผ ์ธ์ฆ์ฝ๋๋ฅผ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์์ ์ฌ์ฉ์ ์ด๋ฉ์ผ๊ณผ ์ธ์ฆ ์ฝ๋๋ฅผ redisTemplate์ ์ฌ์ฉํ์ฌ key, value๋ก ์ ์ฅํ๊ณ , ์ธ์ฆ ์ฝ๋ ์ฌ์ฉ์ด ์๋ฃ๋๋ฉด ์ญ์ ๋ฅผ ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํ
AWS : EC2 ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ Ubuntu ์๋ฒ๋ฅผ ๊ตฌ์ถ(ํธ์คํ ), S3 ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ํ์ผ์ ์ ๋ก๋ ํ ์ ์๋๋ก ๊ตฌ์ถ
Nginx : ์น์๋ฒ๋ฅผ ๊ตฌ์ถ
Vue.js: Memody Project์ Frontend ๊ธฐ๋ฅ ๊ตฌํ
Vue router: ์ค์ฒฉ๋ ๋ผ์ฐํธ/๋ทฐ ๋งคํ, ์ปดํฌ๋ํธ ๊ธฐ๋ฐ์ ๋ผ์ฐํฐ ์ค์ , ์ธ๋ฐํ ๋ค๋น๊ฒ์ด์ ์ปจํธ๋กค
Vuex: Vue.js ์ค์ ์ง์ค์ ๊ด๋ฆฌ (User, Main, Blog๋ก ๋๋์ด ๊ตฌํ)
JavaScript: Frontend์ ์ํ ๋ฐ ์ก์ ๊ด๋ฆฌ
Html: Frontend์ View ๊ตฌํ
css: Frontend์ ์คํ์ผ ์ ์ฉ
Vuetify: Frontend ๋์์ธ ๋ฐ ๋ ์ด์์ ์ค์
Axios: http ํต์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, ๋น๋๊ธฐ ํต์ ์์ฒญ ์ฒ๋ฆฌ
vue-cookies: User ์ ๋ณด ์ฟ ํค ์ค์
-
์๊ฐ
-
AM 10:00 | PM 16:00 ์
-
์ผ์ฃผ์ผ์ ํ๋ฒ์
develop
์ MR -
Front
/Back
์ ๊ฐ์Feature
๋ฅผ MR,develop
Pull ํ์ฌ ์ต์ ํ
-
-
Commit Message Rule
{JIRA issue ID} | {์งํ์ํฉ} | {๊ธฐ๋ฅ ๋ช }
ex)
S03P11A305-1 | Done | ํ์๊ฐ์
ex)
S03P11A305-2 | In Progress| ํ์์ ๋ณด ์์
[๋ง๋ฌด๋ฆฌ] | {๋ ์ง }| README.md
- ex)
[๋ง๋ฌด๋ฆฌ] | 2020.07.21 | README.md
[MR] | {๋ ์ง} | '{์์ค๋ธ๋์น}' into '{ํ๊ฒ๋ธ๋์น}'
์งํ์ํฉ
- Todo
- In Progress
- Done
- ex)
-
PM
๐ตโโ ๋ฏผ๊ฒฝ
-
Frontend
๐ฉโ๐ป ์ ๋น ๐จโ๐ป ์ฌ์ ๐ฉโ๐ป ์ ์ง
-
Backend
๐จโ๐ป ํํ ๐ฉโ๐ป ๋ฏผ๊ฒฝ
-
Master
-
Develop
-
Front
- FeatureFront/doc
- FeatureFront/epic Name
-
Back
- FeatureBack/doc
- FeatureBack/epic Name
-
-
-
Epic : ์ ์ฒด์ ์ธ ํฐ ๊ธฐ๋ฅ๋ค์ Epic์ผ๋ก ๊ตฌ์ฑ
- Ex) Front / User Function (ํ์ ๊ด๋ฆฌ) , Back / Blog Function (๋ธ๋ก๊ทธ)
-
Story : Epic๊ณผ ์ฐ๊ฒฐํ๊ณ Epic์ ๊ด๋ จ๋ ๊ธฐ๋ฅ ๊ตฌํ์ ์์ฃผ๋ก ๊ตฌ์ฑ
- Ex) Front / Main Page , Back / Blog CRUD , Back / Spring Security
-
Bug : ํ ์คํธ ๊ณผ์ ์์ ๋ฐ๊ฒฌ๋ bug๋ฅผ ๋ฑ๋ก
- Ex) Back / JWT Token update
-
์์ธํ ๋ด์ฉ์ ๊ณต์๋ฌธ์ ์ฐธ๊ณ
exports default { created() { } }, methods: { setInputValue(state) { console.log('example') }, }, }
Naming Convention
๊ธฐ๋ณธ์ ์ผ๋ก Full Name์ผ๋ก ์์๋น
ex) res => response, err => error (keyword ๊ฑธ๋ฆฌ๋๊ฑด ์ ์ธ์ ๋๋ค.)
Whitespace [๋์ด์ฐ๊ธฐ ๋ณด์ธ์~~]
-
Use soft tabs set to 2 spaces.
// bad function () { โโโโvar name; } // bad function () { โvar name; } // good function () { โโvar name; }
-
Place 1 space before the leading brace.
// bad function test(){ console.log('test'); } // good function test() { console.log('test'); } // bad dog.set('attr',{ age: '1 year', breed: 'Bernese Mountain Dog' }); // good dog.set('attr', { age: '1 year', breed: 'Bernese Mountain Dog' });
-
Place 1 space before the opening parenthesis in control statements (
if
,while
etc.). Place no space before the argument list in function calls and declarations.// bad if(isJedi) { fight (); } // good ๋์ด์ฐ๊ธฐ ๋ณด์ธ์ ~~ if (isJedi) { fight(); }
-
Set off operators with spaces.
// bad var x=y+5; // good var x = y + 5;
-
Leave a blank line after blocks and before the next statement
// bad if (foo) { return bar; } return baz; // good if (foo) { return bar; } return baz; // bad var obj = { foo: function () { }, bar: function () { } }; return obj; // good var obj = { foo: function () { }, bar: function () { } }; return obj;
Commas
-
Leading commas: Nope.
// bad var story = [ once , upon , aTime ]; // good var story = [ once, upon, aTime ];
Naming Convention
-
Use PascalCase when naming constructors or classes.
// bad function user(options) { this.name = options.name; } var bad = new user({ name: 'nope' }); // good function User(options) { this.name = options.name; } var good = new User({ name: 'yup' });
// Keywords : break,do,instanceof,typeof,case,else,new,var,catch,finally,return,void,continue,for,switch,while, debugger,function,this,with,default,if,throw,delete,in,try // Key๊ฐ์ ํค์๋๋ก ์ก์ง ๋ง๊ธฐ // good var superman = { defaults: { clark: 'kent' }, hidden: true };
Strings
// String ์ธ ๋ '' ์ฐ๊ธฐ // bad var name = "Bob Parr"; // good var name = 'Bob Parr';
Properties
var luke = { jedi: true, age: 28 }; // bad var isJedi = luke['jedi']; // good var isJedi = luke.jedi; //Use subscript notation [] when accessing properties with a variable. var luke = { jedi: true, age: 28 }; function getProp(prop) { return luke[prop]; } var isJedi = getProp('jedi');
-
-
Use
===
and!==
over==
and!=
.-
Objects evaluate to true
-
Undefined evaluates to false
-
Null evaluates to false
-
Booleans evaluate to the value of the boolean
-
Numbers evaluate to false if +0, -0, or NaN, otherwise true
-
Strings evaluate to false if an empty string
''
, otherwise true -
use shortcuts
-
// bad if (name !== '') { // ...stuff... } // good if (name) { // ...stuff... } // bad if (collection.length > 0) { // ...stuff... } // good if (collection.length) { // ...stuff... }
if elif else
// bad if (test) { thing1(); thing2(); } else { thing3(); } // good if (test) { thing1(); thing2(); } else thing3(); }
-
- ๋ฌธ์ ์ฃผ์
-
ํด๋์ค ์ค๋ช ์ฃผ์
-
import ๋ฌธ ๋ค์์ ๊ธฐ์ ํ๋ค.
-
๋ธ๋ก์ฃผ์์ ์ฌ์ฉํ๋ค.
-
๊ฐ ๋ผ์ธ์ *๋ก ์์ํ๋ค.
-
ํด๋น ํด๋์ค์ ๋ํ ๊ธฐ๋ฅ๊ณผ ์ฉ๋ ๊ธฐ์ ์ ์์ฑํ๋ค.
-
...
๋ด์ฉ์ ์์ ํ์ง ์๋๋ค.
/* * ํด๋์ค ์ด๋ฆ * <pre> * <b> History:</b> * ์์ฑ์, ์์ฑ ๋ฒ์ , ์์ฑ ์ผ์, (์ต์ด ์์ฑ) * </pre> * * @author ์์ฑ์ ์ด๋ฆ * @version 1.0, ์์ ์ผ์, ๋ด์ฉ * @see None */
-
-
๋ฉค๋ฒ ํจ์ ์ฃผ์
- ํจ์์ ์๋จ์ ์์นํ๋ค.
- ๋ธ๋ก ์ฃผ์์ ์ฌ์ฉํ๋ค.
- ๋ฉ์๋ ๊ธฐ๋ฅ ์ค๋ช ์ ํ ๋์ค๋ก ๊ฐ๊ฒฐํ๊ฒ ๊ธฐ์ ํ๋ค.
- ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ type๋ช ๊ณผ ๋ณ์๋ช ์ ์ ๊ณ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๋ค.
/** * ๋ก๊ทธ์ธ - userId์ userPw๋ก ํ์ ํ์ธ * * @param int userId - ์ฌ์ฉ์ ์์ด๋ * @param int uwerPw - ์ฌ์ฉ์ ํจ์ค์๋ * @return ๋ก๊ทธ์ธ ์ฑ๊ณต ์ฌ๋ถ, ๋ก๊ทธ์ธ ์ฑ๊ณต์ true return * @ exception ์์ธ์ฌํญ */
-
์ ์ธ
- ํ ์ค์ ํ๋์ ์ ์ธ๋ฌธ ์ฌ์ฉ
int id; // ์ฌ์ฉ์ ์์ด๋ int pw; // ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ Object time // ๋ฑ๋ก ์๊ฐ
- ๋ค์ฌ์ฐ๊ธฐ
- 1๋ฒ์ ํญ ๋๋ 4๋ฒ์ ๊ณต๋ฐฑ
- ์ค ๋๋๊ธฐ
-
ํ๋์ ์์ด ํ ์ค์ ๋ค์ด๊ฐ์ง ์์ ๋
-
์ฝค๋ง ํ์ ๋์ค๋ก ๋๋๋ค.
-
์ฐ์ฐ์ ์์์ ๋์ค๋ก ๋๋๋ค.
-
๋ค์ฌ์ฐ๊ธฐ๋ 8๊ฐ์ ๋น ์นธ ์์น์ ์ฌ์ฉํ๋ค.
-
if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); }
-
- ๊ดํธ
- ์ฌ๋ ๊ดํธ ๋ค์๊ณผ ๋ซ๋ ๊ดํธ ์ด์ ์๋ ๊ณต๋ฐฑ์ด ์๋๋ก ํ๋ค.
- ๋ช ๋ช ๊ท์น
- Packages
- ํจํค์ง ์ด๋ฆ์ ์ต์์ ๋ ๋ฒจ์ ์๋ฌธ์, ๊ฐ์ฅ ๋์ ๋ ๋ฒจ์ ๋๋ฉ์ธ ์ด๋ฆ์ค ํ๋๋ก ์ค์ ํ๋ค.
- ํจํค์ง ์ด๋ฆ์ ๋๋จธ์ง ๋ถ๋ถ์ ํ๋ก์ ํธ ๋ช ์ผ๋ก ์ค์ ํ๋ค.
- ํด๋น ํ๋ก์ ํธ์์๋ com.web.blog ๋ก ์ค์ ํ๋ค.
- Classes
- ํด๋์ค ์ด๋ฆ์ ๋ช ์ฌ, ๋ณตํฉ ๋จ์ด์ผ ๊ฒฝ์ฐ ๊ฐ ๋จ์ด์ ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์ค์ ํ๋ค.
- ์ฒซ ๊ธ์๋ ๋๋ฌธ์๋ก ์์ํ๋ค.
- Interfaces
- ํด๋์ค ์ด๋ฆ๊ณผ ๊ฐ์ ๋๋ฌธ์ ์ฌ์ฉ ๊ท์น์ ์ ์ฉํ๋ค.
- Methods
- ๋ฉ์๋์ ์ด๋ฆ์ ๋์ฌ, ๋ณตํฉ ๋จ์ด์ผ ๊ฒฝ์ฐ ์ฒซ ๋จ์ด๋ ์๋ฌธ์๋ก ์์ํ๊ณ , ๊ทธ์ดํ์ ๋์ค๋ ๋จ์ด์ ์ฒซ ๋ฌธ์๋ ๋๋ฌธ์๋ก ์ฌ์ฉํ๋ค.
- run();
- runMethod();
- ๋ฉ์๋์ ์ด๋ฆ์ ๋์ฌ, ๋ณตํฉ ๋จ์ด์ผ ๊ฒฝ์ฐ ์ฒซ ๋จ์ด๋ ์๋ฌธ์๋ก ์์ํ๊ณ , ๊ทธ์ดํ์ ๋์ค๋ ๋จ์ด์ ์ฒซ ๋ฌธ์๋ ๋๋ฌธ์๋ก ์ฌ์ฉํ๋ค.
- Variables
- ๋ณ์ ์ด๋ฆ์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ์๋ฌธ์๋ก ์์ํ๊ณ , ๊ฐ ๋ด๋ถ ๋จ์ด์ ์ฒซ ๋ฒ์งธ ๋ฌธ์๋ ๋๋ฌธ์๋ก ์์ํ๋ค.
- ๊ทธ ๋ณ์์ ์ฌ์ฉ ์๋๋ฅผ ์์๋ผ ์ ์๋๋ก ์๋ฏธ์๊ฒ ์ค์ ํ๋ค.
- Constants
- ํด๋์ค ์์๋ก ์ ์ธ๋ ๋ณ์๋ค์ ์ด๋ฆ์ ๋ชจ๋ ๋๋ฌธ์๋ก ์ฌ์ฉํ๊ณ ๊ฐ๊ฐ์ ๋จ์ด๋ ์ธ๋๋ฐ(_)๋ก ๋ถ๋ฆฌํ๋ค.
- static final int MIN_WIDTH = 4;
- ํด๋์ค ์์๋ก ์ ์ธ๋ ๋ณ์๋ค์ ์ด๋ฆ์ ๋ชจ๋ ๋๋ฌธ์๋ก ์ฌ์ฉํ๊ณ ๊ฐ๊ฐ์ ๋จ์ด๋ ์ธ๋๋ฐ(_)๋ก ๋ถ๋ฆฌํ๋ค.
- ๊ณตํต
- ์๋ฌธ์๋ฅผ ์ฌ์ฉํ๋ค.
- snake case๋ฅผ ์ฌ์ฉํ๋ค.
- Table
- ๋ณต์ํ์ ์ฌ์ฉํ๋ค.
- ์ด๋ฆ์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๋จ์ด๋ฅผ underbar๋ก ์ฐ๊ฒฐํ์ฌ snake case๋ฅผ ์ฌ์ฉํ๋ค.
- vip_member
- ๊ต์ฐจ ํ
์ด๋ธ์ ์ด๋ฆ์ "_and_"๋ก ์ฐ๊ฒฐํ๋ค
- articles_and_movies
- Column
-
auto increment ์์ฑ์ PK๋ฅผ ๋๋ฆฌํค๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ, "ํ ์ด๋ธ ์ด๋ฆ์ ๋จ์ํ"_id ์ ๊ท์น์ผ๋ก ๋ช ๋ช ํ๋ค.
-
์ด๋ฆ์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๋จ์ด๋ฅผ underscore ๋ก ์ฐ๊ฒฐํ๋ snake case ๋ฅผ ์ฌ์ฉํ๋ค.
-
foreign key ์ปฌ๋ผ์ ๋ถ๋ชจ ํ ์ด๋ธ์ primary key ์ปฌ๋ผ ์ด๋ฆ์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค.
- self ์ฐธ์กฐ์ธ ๊ฒฝ์ฐ, primary key ์ปฌ๋ผ ์ด๋ฆ ์์ ์ ์ ํ ์ ๋์ด๋ฅผ ์ฌ์ฉํ๋ค.
- ๊ฐ์ primary key ์ปฌ๋ผ์ ์์ ํ ์ด๋ธ์์ 2๋ฒ ์ด์ ์ฐธ์กฐํ๋ ๊ฒฝ์ฐ, primary key ์ปฌ๋ผ ์ด๋ฆ ์์ ์ ์ ํ ์ ๋์ด๋ฅผ ์ฌ์ฉํ๋ค.
-
boolean ์ ํ์ ์ปฌ๋ผ์ด๋ฉด "_flag" ์ ๋ฏธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
-
date, datetime ์ ํ์ ์ปฌ๋ผ์ด๋ฉด "_date" ์ ๋ฏธ์ด๋ฅผ ์ฌ์ฉํ๋ค.
article_id, movie_id : "ํ ์ด๋ธ ์ด๋ฆ์ ๋จ์ํ" + "_id" complete_flag : boolean ์ ํ์ ์ปฌ๋ผ issue_date : ๋ ์ง ์ ํ์ ์ปฌ๋ผ
- Foreign Key
-
์ด๋ฆ์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๋จ์ด๋ฅผ hyphen ์ผ๋ก ์ฐ๊ฒฐํ๋ snake case ๋ฅผ ์ฌ์ฉํ๋ค.
-
"fk"-"๋ถ๋ชจ ํ ์ด๋ธ ์ด๋ฆ"-"์์ ํ ์ด๋ธ ์ด๋ฆ"
-
๊ฐ์ ๋ถ๋ชจ-์์ ํ ์ด๋ธ์ 2๊ฐ ์ด์์ foreign key๊ฐ ์๋ ๊ฒฝ์ฐ, numberingํฉ๋๋ค.
fk-movies-articles : article ํ ์ด๋ธ์ด movie ํ ์ด๋ธ์ ์ฐธ์กฐ fk-admins-notices-1 / fk-admins-notices-2 : notices ํ ์ด๋ธ์ด admins ํ ์ด๋ธ์ 2ํ ์ด์ ์ฐธ์กฐํ์ฌ numbering
-
- Index
- ์ด๋ฆ์ ๊ตฌ์ฑํ๋ ๊ฐ๊ฐ์ ๋จ์ด๋ฅผ hyphen ์ผ๋ก ์ฐ๊ฒฐํ๋ snake case ๋ฅผ ์ฌ์ฉํ๋ค.
- ์ ๋์ด
- unique index : uix
- spatial index : six
- index : nix
- "์ ๋์ด"-"ํ ์ด๋ธ ์ด๋ฆ"-"์ปฌ๋ผ ์ด๋ฆ"-"์ปฌ๋ผ ์ด๋ฆ"
uix-accounts-login_email